You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Rust的Warp库提供静态文件时出现404问题求助

解决Warp静态文件服务返回404的问题

我来帮你搞定这个404的问题!核心原因是你代码里的静态文件路径写错了,咱们一步步来修正:

问题分析

你的代码里写的是绝对路径/www/static,这个路径指向的是系统根目录下的www/static文件夹,但你的实际静态文件放在项目的src/www/static里。当你运行cargo run时,程序的工作目录是项目根目录(也就是src文件夹的上级目录),所以绝对路径完全匹配不上,自然返回404。

修正方案

有两种可靠的方式来修复路径问题:

方案1:使用项目根目录的相对路径

直接用相对路径指向静态文件所在的位置,代码修改如下:

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

#[tokio::main]
async fn main() {
    // 指向项目根目录下的src/www/static
    let static_assets = warp::path("static").and(warp::fs::dir("./src/www/static"));
    let routes = static_assets;
    warp::serve(routes).run(([127, 0, 0, 1], 3030)).await;
}

方案2:使用CARGO_MANIFEST_DIR(更鲁棒)

如果担心运行程序时的工作目录变化,可以用Rust提供的env!("CARGO_MANIFEST_DIR")宏,它会自动获取项目的根目录路径,这样不管在哪里运行程序都能正确找到文件:

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

#[tokio::main]
async fn main() {
    // 拼接项目根目录和静态文件路径
    let static_dir = Path::new(env!("CARGO_MANIFEST_DIR"))
        .join("src")
        .join("www")
        .join("static");
    
    let static_assets = warp::path("static").and(warp::fs::dir(static_dir));
    let routes = static_assets;
    warp::serve(routes).run(([127, 0, 0, 1], 3030)).await;
}

验证

修改代码后运行cargo run,再访问localhost:3030/static/index.js,就能正常获取到你的静态文件啦!

内容的提问来源于stack exchange,提问作者kumarmo2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 10:57:30