我有一个简单的应用程序,带有 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
}
Run Code Online (Sandbox Code Playgroud)
它编译并运行得很好。但是当尝试访问时localhost:7080/test
,我得到以下响应:
请求的应用程序数据配置不正确。查看/启用调试日志以获取更多详细信息。
我在控制台中没有看到任何日志。如何查看或启用 Actix Web 日志?
Tob*_* S. 31
要查看 Actix Web 的日志,请将env_logger
依赖项添加到cargo.toml
.
[dependencies]
env_logger = "0.10.0"
Run Code Online (Sandbox Code Playgroud)
您还必须设置环境变量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();
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
这将为 Rust 和 Actix Web 启用调试日志记录。
要解决最初的问题:您始终需要包装传递给的app_data()
数据Data::new()
。
我之前就是这样做的:
HttpServer::new(move || {
App::new()
/* ... */
.app_data(client.clone())
/* ... */
})
Run Code Online (Sandbox Code Playgroud)
应该如何代替:
HttpServer::new(move || {
App::new()
/* ... */
.app_data(Data::new(client.clone())) // <-- Data::new() here
/* ... */
})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6329 次 |
最近记录: |