gpt4 book ai didi

mongodb - 特性 `std::convert::From` 没有为 `std::io::Error` 实现

转载 作者:行者123 更新时间:2023-12-03 11:30:00 24 4
gpt4 key购买 nike

尝试用 actix-web 和 mongodb 制作服务器。获取错误

the trait std::convert::From<mongodb::error::Error> is not implemented for std::io::Error

这是我的代码

use actix_web::{web, App, HttpRequest, HttpServer, Responder};
use mongodb::{options::ClientOptions, Client};

async fn greet(req: HttpRequest) -> impl Responder {
let name = req.match_info().get("name").unwrap_or("World");
format!("Hello {}!", &name)
}

#[actix_rt::main]
async fn main() -> std::io::Result<()> {
// Parse a connection string into an options struct.
let mut client_options = ClientOptions::parse("mongodb://localhost:27017")?;

// Manually set an option.
client_options.app_name = Some("My App".to_string());

// Get a handle to the deployment.
let client = Client::with_options(client_options)?;

// List the names of the databases in that deployment.
for db_name in client.list_database_names(None)? {
println!("{}", db_name);
}

HttpServer::new(|| {
App::new()
.route("/", web::get().to(greet))
.route("/{name}", web::get().to(greet))
})
.bind("127.0.0.1:8000")?
.run()
.await
}

我错过了什么吗?

最佳答案

这意味着您使用 ? 调用的函数之一最后可以返回一个 mongodb::error::Error .但是main的签名是 std::io::Result<()> , 这是一个隐含的 Result<(), std::io::Error> .它可以接受的唯一错误类型是 io::Error,而不是 mongodb::Error。

看起来你正在转义的所有函数都可能返回这个 mongodb::error::Error ,所以你可以尝试将主签名更改为这样的结果:Result<(). mongodb::error::Error> .但我建议您对这些潜在错误进行适当的错误处理,因为这是您的 main().改变那些 ?.expect("Some error message");至少。该程序仍然会崩溃,但它会以对您有意义的方式崩溃。

关于mongodb - 特性 `std::convert::From<mongodb::error::Error>` 没有为 `std::io::Error` 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61472244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com