首页 > 解决方案 > 在 rust 中使用 warp 服务静态文件

问题描述

我正在使用warp库来制作一个生锈的网络应用程序。我正在尝试提供静态文件。我已经从Doc阅读了它的文档。

这是我的代码片段

use serde::Deserialize;
use serde::Serialize;
use warp::path;
use warp::Filter;

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

    // let routes = get_routes.or(post_routes).or(static_assets).or(file_route);
    let routes = static_assets;

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

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

这是文件树

src
├── main.rs
└── www
    └── static
        └── index.js

标签: web-applicationsrustrust-warp

解决方案


这里的错误令人惊讶地微不足道。路径/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;
}

推荐阅读