3

当使用具有省略生命周期的 Rocket 时State,可以正常处理对路由的请求:

#[post("/foo")]
pub fn foo_handler(db: State<Db>) {
    // ...
}

但是,如果提供了明确的生命周期,那么 Rocket 会在请求中出错Attempted to retrieve unmanaged state!

#[post("/foo")]
pub fn foo_handler<'a>(db: State<&'a Db>) {
    // ...
}

编译器没有在这里找到一些东西,或者 Rocket 避免了安全检查,因为它编译正常,没有任何错误或警告。有任何想法吗?

4

2 回答 2

1

这似乎是实现所需结果的方法:

#[post("/foo")]
pub fn foo_handler<'a>(db: State<'a, Db>) {
  // ...
}

Rocket 的State文档中提供了一个示例。不过,我希望上述实现会引发错误,因为它是有效的语法。

于 2019-04-28T12:42:08.353 回答
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 ...
于 2020-07-04T01:53:28.153 回答