gpt4 book ai didi

rust - actix_web 将配置传递给处理程序

转载 作者:行者123 更新时间:2023-11-29 08:19:51 25 4
gpt4 key购买 nike

我正在编写一个 API 服务器并想读入配置文件并将该信息传递给请求处理程序。我很难让 Rust 允许这种情况发生。

let cfg = Arc::new(read_config());
let server = HttpServer::new(|| {
App::new()
.wrap(middleware::Logger::default())
.service(web::resource("/api/files").route(web::get().to(move || {
list_files(cfg.clone());
})))
.service(fs::Files::new("/", "client/public").index_file("index.html"))
});

我目前得到的错误是

56 |       let cfg = Arc::new(read_config());
| --- captured outer variable
...
60 | .service(web::resource("/api/files").route(web::get().to(move || {
| ______________________________________________________________________^
61 | | list_files(cfg.clone());
62 | | })))
| |_____________^ cannot move out of captured variable in an `Fn` closure

这应该怎么做?将变量传递给请求处理程序的正确方法是什么?

最佳答案

这是因为您有 2 级关闭。第一个是 HttpServer::new() 的参数,它是非移动的:它捕获对 cfg 的引用,然后您尝试将其移动到第二个闭包 web::get().to().

如果您在第一个闭包中创建了一个克隆,您可以将其移动到第二个闭包中,如下所示:

let cfg = Arc::new(read_config());
let server = HttpServer::new(|| {
let cfg = cfg.clone();
App::new()
.wrap(middleware::Logger::default())
.service(web::resource("/api/files").route(web::get().to(move || {
list_files(cfg);
})))
.service(fs::Files::new("/", "client/public").index_file("index.html"))
});

关于rust - actix_web 将配置传递给处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57937759/

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