在使用生命周期被忽略的Rocket的State
时,可以很好地处理对路由的请求:
#[post("/foo")]
pub fn foo_handler(db: State<Db>) {
// ...
}
但是,如果提供了明确的生存期,则对带有Attempted to retrieve unmanaged state!
的请求的Rocket错误:
#[post("/foo")]
pub fn foo_handler<'a>(db: State<&'a Db>) {
// ...
}
这是编译器未在此处进行处理的原因,或者是Rocket避免了安全检查,因为这可以正常编译而没有任何错误或警告。有什么想法吗?
答案 0 :(得分:0)
这似乎是达到所需结果的方法:
#[post("/foo")]
pub fn foo_handler<'a>(db: State<'a, Db>) {
// ...
}
一个示例有助于Rocket的State文档。我希望上述实现会抛出错误,因为它是有效的语法。
答案 1 :(得分:0)
我发现此错误是由于无法调用unwrap()
初始化要使用的值上的State
造成的。
let index = load().unwrap(); // <-- without unwrap, compiled but failed on request
rocket::ignite()
.manage(index) // normal mount and so on here
... etc ...