Actix Web:请求的应用程序数据配置不正确。查看/启用调试日志以获取更多详细信息。

14

我有一个简单的应用程序,它具有一个HTTP端点和与MongoDB数据库的连接。

use actix_web::{
    middleware, post,
    web::{self},
    App, HttpServer, Responder,
};
use mongodb::{options::ClientOptions, Client};
use serde::Deserialize;

#[derive(Deserialize, Debug)]
struct TestBody {
    name: String,
    age: u8,
}

#[post("/test")]
async fn test(query: web::Json<TestBody>, db: web::Data<Client>) -> impl Responder {
    for db_name in db.list_database_names(None, None).await.unwrap() {
        println!("{}", db_name);
    }

    let res = format!("{} {}", query.name, query.age);
    res
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    let connection_string = "secret-connection-string";
    let client_options = ClientOptions::parse(connection_string).await.unwrap();
    let client = Client::with_options(client_options).unwrap();

    HttpServer::new(move || {
        App::new()
            .wrap(middleware::Compress::default())
            .app_data(client.clone())
            .app_data(web::JsonConfig::default())
            .service(test)
    })
    .bind("0.0.0.0:7080")?
    .run()
    .await
}

编译和运行都很顺利。但是当我尝试访问localhost:7080/test时,会收到以下响应:

请求的应用程序数据配置不正确。查看/启用调试日志以获取更多详细信息。

控制台中没有任何日志。我如何查看或启用Actix Web日志?

1个回答

30

要查看Actix Web的日志,请将env_logger依赖项添加到cargo.toml中。

[dependencies]
env_logger = "0.10.0"

你还需要设置环境变量RUST_LOG来确定日志级别。这可以使用std::env::set_var在运行时完成。

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    std::env::set_var("RUST_LOG", "debug");
    env_logger::init();

    /* ... */
}

这将为 Rust 和 Actix Web 启用调试日志记录。


为了解决原始问题:您始终需要使用 Data::new() 包装传递给 app_data() 的数据。

这是我以前的做法:

HttpServer::new(move || {
  App::new()
    /* ... */
    .app_data(client.clone())
    /* ... */
})

应该是怎样的:

HttpServer::new(move || {
  App::new()
    /* ... */
    .app_data(Data::new(client.clone())) // <-- Data::new() here
    /* ... */
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接