首页 > 解决方案 > 使用显式生命周期时,Rocket 的状态错误“尝试检索非托管状态”?

问题描述

当使用具有省略生命周期的 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 避免了安全检查,因为它编译正常,没有任何错误或警告。有任何想法吗?

标签: rustrust-rocket

解决方案


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

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

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


推荐阅读