Rust &引用;错误E0477:类型未满足所需的生存期;使用Actix Web处理程序
我正在尝试使用Actix Web实现HTTP请求处理程序。以下是我的代码的相关部分:Rust &引用;错误E0477:类型未满足所需的生存期;使用Actix Web处理程序,rust,rust-actix,Rust,Rust Actix,我正在尝试使用Actix Web实现HTTP请求处理程序。以下是我的代码的相关部分: impl<S> Handler<S> for FooBarHandler { type Result = Box<Future<Item = HttpResponse, Error = Error>>; fn handle(&mut self, req : HttpRequest<S>) -> Self::Result
impl<S> Handler<S> for FooBarHandler {
type Result = Box<Future<Item = HttpResponse, Error = Error>>;
fn handle(&mut self, req : HttpRequest<S>) -> Self::Result {
req.json().from_err().and_then(|foo : Foo|
self.baz.qux(foo);
Ok(HttpResponse::Ok().finish())
}).responder()
}
}
FooBarHandler的impl处理程序{
类型结果=框;
fn handle(&mutself,req:HttpRequest)->self::Result{
req.json()。从_err()和_then(|foo:foo|
self.baz.qux(foo);
Ok(HttpResponse::Ok().finish())
}).responder()
}
}
但是,我收到以下错误消息:
error[E0477]: the type `mymod::futures::AndThen<mymod::futures::future::FromErr<mymod::actix_web::dev::JsonBody<mymod::actix_web::HttpRequest<S>, mymod::Foo>, mymod::actix_web::Error>, std::result::Result<mymod::actix_web::HttpResponse, mymod::actix_web::Error>, [closure@src/mymod.rs:53:40: 56:10 self:&&mut mymod::FooBarHandler]>` does not fulfill the required lifetime
--> src/mymod.rs:56:12
|
56 | }).responder()
| ^^^^^^^^^
|
= note: type must satisfy the static lifetime
error[E0477]:类型'mymod::futures::AndThen'未满足所需的生存期
-->src/mymod.rs:56:12
|
56 |}).响应者()
| ^^^^^^^^^
|
=注意:类型必须满足静态生存期
我完全不理解这个错误消息。代码实际上与相同,它不包含任何生命周期注释。您在.中使用
self
,然后在.中使用未来,这违反了生命周期要求。您在.中使用self
,然后在.中使用未来,这违反了生命周期要求。我应该如何避免这种情况?我尝试添加让baz=self.baz.clone()
在之前,然后
未来,然后用baz
替换self.baz
,但这会产生以下错误:error[E0373]:闭包可能比当前函数寿命长,但它借用了当前函数所拥有的baz,进行克隆,然后将其移动到闭包中,(移动|…{…})
我试过了,但我得到了以下错误:参数类型“S”可能活得不够长
。编译器建议添加一个显式的生存期限制--S:“static
,但这会导致错误,即无法在线程之间安全地共享该特性。我应该如何避免此错误?我尝试添加了let baz=self.baz。克隆();
在之前,然后
未来,然后将self.baz
替换为baz
,但这会产生以下错误:错误[E0373]:closure可能比当前函数的寿命长,但它借用了当前函数所拥有的
baz,进行克隆,然后将其移动到closure,。然后(移动|…{…})
我试过了,但我得到了以下错误:参数类型“S”可能活得不够长
。编译器建议添加一个显式的生存期限制--S:“static
,但这会导致错误,即无法在线程之间安全地共享该特性。目前提出的问题与主题无关:问题搜索调试帮助(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。您没有提供FooBarHandler
的定义,您没有显示什么板条箱(及其版本!)您正在导入,等等。事实上,您的代码在语法上是无效的。正如目前提出的,这个问题是离题的:寻求调试帮助的问题(“为什么这个代码不工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现该问题所需的最短代码。您没有提供FooBarHandler
的定义,没有显示要导入的板条箱(及其版本!),等等。事实上,您的代码在语法上无效。