搜尋

首頁  >  問答  >  主體

使用 Rocket 提供 HTML/CSS/JS 服務

我正在嘗試使用 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粉605233764P粉605233764360 天前421

全部回覆(2)我來回復

  • P粉377412096

    P粉3774120962024-03-28 00:25:34

    我想出了一個更簡單的解決方案。您可以簡單地使用 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 檔案。

    回覆
    0
  • P粉764785924

    P粉7647859242024-03-28 00:15:22

    這是最適合我的程式碼。我想為那些可能正在努力進入後端 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])
    }

    ^ 最後,您只需安裝路線即可。這樣做似乎對我有用。我相信更聰明、更有經驗的人可以用比我更優雅的方式解釋它,但如果你像我一樣處於緊要關頭,並且你無計可施,希望這是一個急需的救生圈當你溺水時。

    回覆
    0
  • 取消回覆