如何在rocket.rs Fairing中获得数据库连接



如何使用Rocket_sync_db_pools访问Rust Rocket中Fairing(0.5-rc1(中的数据库?

在路由中,我可以将其作为一个参数进行请求,如下所示:

#[get("/")]
pub async fn index(db: Database) -> Json<Index> {
...
}

但是当注册AdHoc Fairing时,我该如何要求数据库?

rocket::build()
.attach(Template::fairing())
.attach(Database::fairing())
.attach(AdHoc::on_liftoff("Startup Check", |rocket| {
Box::pin(async move {
// Want to access the database here
})
}))
...

找到了一个解决方案:数据库宏为此创建了一个get_one方法。请参阅此处的文档:https://api.rocket.rs/v0.5-rc/rocket_sync_db_pools/attr.database.html

它可以这样使用:

#[database("db")]
pub struct Database(diesel::SqliteConnection);
rocket::build()
.attach(Template::fairing())
.attach(Database::fairing())
.attach(AdHoc::on_liftoff("Startup Check", |rocket| {
Box::pin(async move {
let db = Database::get_one(rocket).await.unwrap();
// use db instance ...
})
}))
...

最新更新