< 返回版块

eweca-d 发表于 2021-08-29 15:28

Tags:axum, web

再重构一个简单的单页面小程序的时候打算用axum代替warp的时候遇到了个问题。

    let post = warp::post()
        .and(warp::body::bytes())
        .map(move |content: Bytes| {
            Response::builder().body(server::handle_post_request(content))
        });

    let routers = warp::get().and(warp::fs::dir("./wwwroot")).or(post);

    warp::serve(routers).run(([127, 0, 0, 1], 3030)).await;

有如上的简单代码,使用wwwroot文件夹目录来生成页面,文件夹里包含有index.html,JS和CSS文件,怎么使用axum改写呢?看了下doc,只看到

let app = Router::new()
    // this route cannot fail
    .route("/foo", get(|| async {}))
    // this route can fail with io::Error
    .route(
        "/",
        service::get(service_fn(|_req: Request<Body>| async {
            let contents = tokio::fs::read_to_string("some_file").await?;
            Ok::<_, io::Error>(Response::new(Body::from(contents)))
        }))
        .handle_error(handle_io_error),
    );

fn handle_io_error(error: io::Error) -> Result<impl IntoResponse, Infallible> {
    // ...
}

这种写法。看着头大不说,那个some_file只是简单读取文件,完成不了我的要求。

有大神说说axum完成了这个部分了吗?这框架的代码看着感觉有点过于复杂了。

评论区

写评论
作者 eweca-d 2021-08-29 16:11

感谢,看到了这个examples文件夹了,跟着运行成功了。

--
👇
Bai-Jinlin: 为什么不去看官方的examples呢?https://github.com/tokio-rs/axum/blob/main/examples/static-file-server/src/main.rs

Bai-Jinlin 2021-08-29 15:55

为什么不去看官方的examples呢?https://github.com/tokio-rs/axum/blob/main/examples/static-file-server/src/main.rs

1 共 2 条评论, 1 页