actix_web将配置传递给处理程序

时间:2019-09-14 17:25:52

标签: rust

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

$doctrine = $kernel->getContainer()->get('doctrine');
self::assertInstanceOf(EntityManagerInterface::class, $doctrine);

我当前遇到的错误是

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"))
});

该如何完成?将变量传递给请求处理程序的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

这是因为您有2个关闭级别。第一个是HttpServer :: new()的参数,该参数是固定的:它捕获对cfg的引用,然后您尝试将其移至第二个闭包web :: get()。to()。 / p>

如果您在第一个闭合中创建一个克隆,则可以将其移至第二个闭合中,如下所示:

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"))
});