在 Rust 中使用 warp 提供静态文件

kum*_*mo2 2 web-applications rust rust-warp

我正在使用warp库在 Rust 中制作一个网络应用程序。我正在尝试提供静态文件。\n我已从Doc阅读了其文档。

\n\n

这是我的代码片段

\n\n
use serde::Deserialize;\nuse serde::Serialize;\nuse warp::path;\nuse warp::Filter;\n\n#[tokio::main]\nasync fn main() {\n    let static_assets = warp::path("static").and(warp::fs::dir("/www/static"));\n\n    // let routes = get_routes.or(post_routes).or(static_assets).or(file_route);\n    let routes = static_assets;\n\n    warp::serve(routes).run(([127, 0, 0, 1], 3030)).await;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是当我访问该路径时localhost:3030/static/index.js,它会返回404响应

\n\n

这是文件树

\n\n
src\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.rs\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 www\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 static\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.js\n
Run Code Online (Sandbox Code Playgroud)\n

edw*_*rdw 8

这里的错误出奇地微不足道。路径/www/static是绝对的。为了使其工作,您必须将该目录放在文件系统的根目录中。通过使用相对路径,它可以工作:

#[tokio::main]
async fn main() {
    let route = warp::path("static").and(warp::fs::dir("www/static"));

    warp::serve(route).run(([127, 0, 0, 1], 3030)).await;
}
Run Code Online (Sandbox Code Playgroud)