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

我正在嘗試使用 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學習者快速成長!