首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理程序中的Actix-web和异步请求

处理程序中的Actix-web和异步请求
EN

Stack Overflow用户
提问于 2021-11-12 11:40:41
回答 1查看 66关注 0票数 0

目前,我正开始寻找进入Rust的方法,因此我计划用Actix-web编写一个简单的API-Server。我要实现的当前端点应该在幕后执行两个HTTP请求,如果这两个请求都执行成功,则响应用户。

但是让actix-web和reqwest一起运行似乎是一件很有挑战性的事情。

下面是我的代码main.rs

代码语言:javascript
复制
use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder};

#[get("/")]
async fn hello() -> impl Responder {
    let body = reqwest::get("https://www.rust-lang.org").await;
    match body {
        Ok(res) => println!("{:?}", res),
        _ => println!("Default"),
    }
    
    HttpResponse::Ok().body("Hello world!")
}

#[post("/echo")]
async fn echo(req_body: String) -> impl Responder {
    HttpResponse::Ok().body(req_body)
}

async fn manual_hello() -> impl Responder {
    HttpResponse::Ok().body("Hey there!")
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| {
        App::new()
            .service(hello)
            .service(echo)
            .route("/hey", web::get().to(manual_hello))
    })
    .bind("127.0.0.1:8080")?
    .run()
    .await
}

Cargo.toml依赖项

代码语言:javascript
复制
actix-web = "3"
reqwest = { version = "0.11", features = ["json"] }
tokio = { version = "1", features = ["full"] }

错误消息:

代码语言:javascript
复制
cargo run
   Compiling edipoint v0.1.0 (/home/user/folder/project)
    Finished dev [unoptimized + debuginfo] target(s) in 7.48s
     Running `target/debug/edipoint`
thread 'actix-rt:worker:0' panicked at 'there is no reactor running, must be called from the context of a Tokio 1.x runtime', /home/akarner/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.13.0/src/runtime/blocking/pool.rs:84:33
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

我对rust完全是个新手,肯定会有类似的问题,但它们中的大多数都相当过时。基于这个错误,我会说,我需要启动tokio运行时,但这不应该已经由actix-web makro完成了吗?问题是,我不确定我是否需要actix或actix-web或actix-rt等。

EN

回答 1

Stack Overflow用户

发布于 2021-11-12 12:19:21

非常感谢@E_net4馆长。在升级到actix-web版本4之后,一切都运行得很好。

代码语言:javascript
复制
[dependencies]
# use newest "at this point in time" version
actix-web = "4.0.0-beta.10"
reqwest = { version = "0.11", features = ["json"] }
tokio = { version = "1", features = ["full"] }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69942372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档