Servir HTML/CSS/JS à l'aide de Rocket
P粉605233764
P粉605233764 2024-03-27 18:36:33
0
2
303

J'essaie d'utiliser le framework Rust Rocket comme backend pour héberger mon site Web, mais j'ai du mal à proposer des fichiers HTML de base et leurs fichiers associés.

En ce qui concerne les choses, voici le code de mon "site web". Je ne sais vraiment pas comment faire cela, étant nouveau dans le développement back-end, j'ai pensé voir s'il y avait une réponse ici.

#[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])
}

Je ne suis pas sûr de la meilleure façon de créer les fichiers frontend. Tout conseil/aide est apprécié. S'il vous plaît, soyez indulgent avec moi car j'ai peu d'expérience en développement backend.

J'ai essayé les exemples statiques répertoriés sur GitHub, cependant, je pense avoir rencontré un problème : je peux afficher la page HTML, mais les images, les fichiers CSS et JavaScript ne sont pas servis correctement.

P粉605233764
P粉605233764

répondre à tous(2)
P粉377412096

J'ai trouvé une solution plus simple. Vous pouvez simplement utiliser FileServer pour héberger vos fichiers statiques comme ceci :

#[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())
}

Ainsi, chaque fois que mon modèle HTML essaie d'appeler un fichier CSS, Rocket sert le fichier CSS à partir du répertoire /templates/css.

P粉764785924

C'est le code qui me convient le mieux. Je veux expliquer cela pour ceux d'entre vous qui pourraient essayer de se lancer dans le développement Web backend (en particulier 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])
}

Je vais commencer par la première partie.

#[macro_use] extern crate rocket;


use rocket::{fs::NamedFile, response::Redirect};
use std::path::{Path, PathBuf};

^ Ceci n'est que notre déclaration de ce que je dois utiliser.

#[get("/")]
fn index() -> Redirect {
    let redirect = Redirect::to(uri!("/home"));
    redirect
}

#[get("/home")]
async fn home () -> Option {
    NamedFile::open("client/index.html").await.ok()
}

^ Cette section est utilisée pour rediriger les URL d'index vierges pour ne pas donner de 404 et accéder aux URL avec "/home" à la fin. Ce n’est que ma préférence personnelle, mais maintenant vous savez aussi comment le faire !

Enfin, j'ai compris comment ouvrir spécifiquement différents fichiers en regardant l'exemple de l'analyseur Rust pour NamedFile.

#[get("/")]
async fn files(file: PathBuf) -> Option {
    NamedFile::open(Path::new("client").join(file)).await.ok()
}

^ Cette section est utilisée pour gérer d'autres fichiers tels que CSS et JavaScript liés dans le document HTML. Je suppose que ce n'est pas une approche très sécurisée, mais pour un site de portfolio, je n'ai pas besoin d'une sécurité très forte.

#[launch]
fn rocket() -> _ {
    rocket::build().mount("/", routes![index, home, files])
}

^ Enfin, il vous suffit d'installer l'itinéraire. Faire cela semble fonctionner pour moi. Je suis sûr que des personnes plus intelligentes et plus expérimentées peuvent l'expliquer d'une manière plus élégante que moi, mais si vous êtes dans le pétrin comme moi et que vous êtes à bout de nerfs, j'espère que c'est une vie bien nécessaire. conservateur quand tu te noies.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!