Rust actix_web传递配置到处理程序
我正在编写一个API服务器,希望读入一个配置文件,并将该信息传递给请求处理程序。我很难让生锈的事情发生Rust actix_web传递配置到处理程序,rust,Rust,我正在编写一个API服务器,希望读入一个配置文件,并将该信息传递给请求处理程序。我很难让生锈的事情发生 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
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
如何做到这一点?将变量传递给请求处理程序的正确方法是什么?这是因为您有两个级别的闭包。第一个是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"))
});
这是因为您有两个级别的闭包。第一个是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"))
});
有没有可能添加
列表文件
功能的定义?有没有可能添加列表文件
功能的定义?