gpt4 book ai didi

rust - 移至actix-web 3.0时发生错误

转载 作者:行者123 更新时间:2023-12-03 11:36:11 26 4
gpt4 key购买 nike

迟到总比没有好,因此我开始重新学习Rust,并决定专注于actix和actix-web。
我在actix-web 1.0中运行了以下代码,但似乎不在actix-web 3.0中运行:
main.rs

 use messages_actix::MessageApp;


fn main() -> std::io::Result<()> {
std::env::set_var("RUST_LOG", "actix_web=info");
env_logger::init();
let app = MessageApp::new(8081);
app.run() // error here
}
错误:“在 run中找不到在当前范围方法中为不透明类型 impl std::future::Future找到的名为 impl std::future::Future的方法
lib.rs
#[macro_use]
extern crate actix_web;

use actix_web::{middleware, web, App, HttpRequest, HttpServer, Result};
use serde::Serialize;

pub struct MessageApp {
pub port: u16,
}

#[derive(Serialize)]
pub struct IndexResponse{
pub message: String,
}

#[get("/")]
pub fn index(req: HttpRequest) -> Result<web::Json<IndexResponse>> { // error here
let hello = req
.headers()
.get("hello")
.and_then(|v| v.to_str().ok())
.unwrap_or_else(|| "world");

Ok(web::Json(IndexResponse {
message: hello.to_owned(),
}))
}
索引错误:未为 Factory<_, _, _>实现特征 fn(HttpRequest) -> std::result::Result<Json<IndexResponse>, actix_web::Error> {<index as HttpServiceFactory>::register::index}
impl MessageApp {
pub fn new(port: u16) -> Self {
MessageApp{ port }
}

pub fn run(&self) -> std::io::Result<()> {
println!("Starting HTTP server at 127.0.0.1:{}", self.port);
HttpServer::new(move || {
App::new()
.wrap(middleware::Logger::default())
.service(index)
})
.bind(("127.0.0.1", self.port))?
.workers(8)
.run() //error here
}
}
错误:预期的枚举 std::result::Result,找到了struct Server检查了迁移 doc,但仍找不到与列出的错误相关的所需信息。
任何帮助都非常感激...谢谢...

最佳答案

现在,较新版本的actix-web使用async-await语法,该语法自Rust 1.39起已稳定。您必须将处理程序设为async:

#[get("/")]
pub async fn index(req: HttpRequest) -> Result<web::Json<IndexResponse>> {
// ...
}
现在,创建 HttpServerasync操作:
impl MessageApp {
pub fn run(&self) -> std::io::Result<()>
HttpServer::new(...)
.run()
.await
}
}
您可以在主要功能中使用 main宏使用async/await:
#[actix_web::main]
async fn main() -> std::io::Result<()> {
let app = MessageApp::new(8081);
app.run().await
}

关于rust - 移至actix-web 3.0时发生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66344499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com