我正在创建一个投资组合网站,一些项目有静态 HTML 演示,我想根据 URL 中的 ID 提供这些演示。路线如下所示:
#[get("/demo/<id>/<pathbuf..>")]
fn site_demo(id: usize, pathbuf: Option<PathBuf>) -> Option<NamedFile> {
// set path according to id
let demo = format!{"static/projects/{:03}/demo/", id};
// if `pathbuf` is not provided, set file to `index.html`
let pathbuf = pathbuf.unwrap_or(PathBuf::from("index.html"));
let path = Path::new(&demo).join(pathbuf);
NamedFile::open(path).ok()
}
当我localhost:5050/demo/003/index.html
在浏览器中输入时,演示(以及演示文件夹中的所有其他内容)都会被加载。但是,一旦我输入,localhost:5050/demo/003/
我就会得到这个错误(同样/
的结果,最后没有):
GET /demo/003/ text/html:
=> Error: No matching routes for GET /demo/003/ text/html.
=> Warning: Responding with 404 Not Found catcher.
=> Response succeeded.
我希望路由匹配,因为它PathBuf
是可选的并且设置为index.html
. 对我有意义...
我在某个地方出错了还是应该打开一个问题?