使用 Rocket 提供 HTML/CSS/JS 服务
P粉605233764
P粉605233764 2024-03-27 18:36:33
0
2
304

我正在尝试使用 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 文件无法正确提供。

P粉605233764
P粉605233764

全部回复(2)
P粉377412096

我想出了一个更简单的解决方案。您可以简单地使用 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 文件。

P粉764785924

这是最适合我的代码。我想为那些可能正在努力进入后端 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])
}

^ 最后,您只需安装路线即可。这样做似乎对我有用。我相信更聪明、更有经验的人可以用比我更优雅的方式解释它,但如果你像我一样处于紧要关头,并且你无计可施,希望这是一个急需的救生圈当你溺水时。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!