再重构一个简单的单页面小程序的时候打算用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完成了这个部分了吗?这框架的代码看着感觉有点过于复杂了。
1
共 2 条评论, 1 页
评论区
写评论感谢,看到了这个examples文件夹了,跟着运行成功了。
--
👇
Bai-Jinlin: 为什么不去看官方的examples呢?https://github.com/tokio-rs/axum/blob/main/examples/static-file-server/src/main.rs
为什么不去看官方的examples呢?https://github.com/tokio-rs/axum/blob/main/examples/static-file-server/src/main.rs