如何为 actix_web() 配置 app_data()

How do I configure app_data() for actix_web()

在我的代码中有这个主要功能:

#[actix_web::main]
async fn main() -> Result<(), StdErr> {
    // loads env variables from .env
    dotenv::dotenv().ok();

    actix_web::HttpServer::new(move || {
        let cors = actix_cors::Cors::default()
            //.allowed_origin(
            //    &(std::env::var("SERVER_URL").unwrap().to_string()+ ":" + &std::env::var("FROTEND").unwrap().to_string())
            //)
            .allow_any_origin()
            .allowed_methods(vec!["GET","POST","PUT"])
            .allowed_headers(vec![
                actix_web::http::header::AUTHORIZATION,
                actix_web::http::header::ACCEPT
            ])
            .allowed_header(
                actix_web::http::header::CONTENT_TYPE
            )
            .max_age(3600);

        //logger::init();
        let party_repo = repo::PartyRepo::PartyRepo::connect();

        actix_web::App::new()
            .app_data(party_repo)
            .wrap(
                cors                
            )
            .service(controllers::PartyController::party_api())
        })
    .bind((std::env::var("SERVER_URL").unwrap().to_string(),
        std::env::var("PARTY_CONTROLLER_PORT").unwrap()
            .parse::<u16>().unwrap()))?
    .run()
    .await?;

    Ok(())
}

编译正确;但是,当我 运行 服务器并尝试发出 get 请求时,我收到邮递员的 500 错误:App data is not configured, to configure use App::data().

现在我是生锈的新手,所以我可能遗漏了一些明显的东西。话虽如此,我的理解是 App.data() 主要与 Arc 一起使用。我试过 但我收到同样的错误。

让我知道是否应该包括更多 :) 谢谢!

查看 Data 文档中的示例。看来您必须将初始化的结构放在 Mutex 中,然后将其添加到 App 中。另请注意,您还需要将其作为互斥体包含在您的路径中 fn


let data = Data::new(Mutex::new(YOUR_DATA))
app.app_data(Data::clone(&data));

async fn index(data: Data<Mutex<YOUR_DATA_TYPE>>) -> impl Responder {

}