我正在尝试使用 Rust Rocket 框架作为托管我的网站的后端,但我正在努力提供基本的 HTML 文件及其关联文件。
就事情而言,这是我的“网站”的代码。我真的不确定如何做到这一点,作为后端开发的新手,我想我会看看这里是否有答案。
#[macro_use] extern crate rocket;
use std::fs::File;
use rocket::{response::{Redirect}, fs::FileServer};
#[get("/")]
fn index() -> Redirect {
let redirect = Redirect::to(uri!("/home"));
redirect
}
#[launch]
fn rocket() -> _ {
rocket::build().mount("/", routes![index])
}
我不确定构建前端文件的最佳方法是什么。任何建议/帮助表示赞赏。请对我宽容一些,因为我在后端开发方面缺乏经验。
我已经尝试了 GitHub 上列出的静态示例,但是,我认为遇到了问题:我可以查看 HTML 页面,但图像、CSS 和 JavaScript 文件无法正确提供。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我想出了一个更简单的解决方案。您可以简单地使用
FileServer来托管您的静态文件,如下所示:#[launch] fn rocket() -> _ { rocket::build() .mount("/", routes![index]) .mount("/css", FileServer::from(relative!("/templates/css"))) .mount("/js", FileServer::from(relative!("/templates/js"))) .mount("/fonts", FileServer::from(relative!("/templates/fonts"))) .mount("/img", FileServer::from(relative!("/templates/img"))) .attach(Template::fairing()) }因此,每当我的 HTML 模板尝试调用 CSS 文件时,Rocket 都会从
/templates/css目录提供 CSS 文件。这是最适合我的代码。我想为那些可能正在努力进入后端 Web 开发(尤其是 Rust)的人解释一下这一点。
#[macro_use] extern crate rocket; use rocket::{fs::NamedFile, response::Redirect}; use std::path::{Path, PathBuf}; #[get("/")] fn index() -> Redirect { let redirect = Redirect::to(uri!("/home")); redirect } #[get("/home")] async fn home () -> Option {
NamedFile::open("client/index.html").await.ok()
}
#[get("/")]
async fn files(file: PathBuf) -> Option {
NamedFile::open(Path::new("client").join(file)).await.ok()
}
#[launch]
fn rocket() -> _ {
rocket::build().mount("/", routes![index, home, files])
} 我将从第一部分开始。
#[macro_use] extern crate rocket; use rocket::{fs::NamedFile, response::Redirect}; use std::path::{Path, PathBuf};^ 这只是我们对我需要使用的内容的声明。
#[get("/")] fn index() -> Redirect { let redirect = Redirect::to(uri!("/home")); redirect } #[get("/home")] async fn home () -> Option {
NamedFile::open("client/index.html").await.ok()
} ^ 此部分用于重定向空白索引 URL,以不给出 404,并转到末尾带有“/home”的 URL。这只是我个人的喜好,但现在你也知道怎么做了!
最后,我通过查看 NamedFile 的 Rust 分析器示例来确定如何具体打开不同的文件。
#[get("/")]
async fn files(file: PathBuf) -> Option {
NamedFile::open(Path::new("client").join(file)).await.ok()
} ^ 此部分用于处理其他文件,例如 HTML 文档中链接的 CSS 和 JavaScript。我想这不是一个非常安全的方法,但对于投资组合网站来说,我不需要非常强大的安全性。
#[launch] fn rocket() -> _ { rocket::build().mount("/", routes![index, home, files]) }^ 最后,您只需安装路线即可。这样做似乎对我有用。我相信更聪明、更有经验的人可以用比我更优雅的方式解释它,但如果你像我一样处于紧要关头,并且你无计可施,希望这是一个急需的救生圈当你溺水时。