Menyajikan File Statis
Penjelasan
Rocket menyediakan `rocket::fs::FileServer` sebagai cara bawaan (tanpa crate tambahan seperti `tower-http` di Axum) untuk melayani file statis dari sebuah folder di disk. `FileServer` sebenarnya adalah sebuah `Handler` khusus yang bisa langsung di-`mount` seperti route biasa. Cara pakainya: `FileServer::from("path/ke/folder")` menghasilkan handler yang kemudian di-mount lewat `.mount(prefix, handler)` — mirip konsepnya dengan `.nest_service()` di Axum, tapi tanpa perlu crate `tower-http` terpisah karena ini bawaan `rocket::fs`. `FileServer` otomatis menangani hal-hal seperti mengirim `index.html` untuk request ke direktori, menentukan `Content-Type` berdasarkan ekstensi file, dan mendukung `Range` header untuk streaming file besar (misalnya video).
Contoh Konsep
#[macro_use] extern crate rocket;
use rocket::fs::FileServer;
#[get("/api/status")]
fn api_status() -> &'static str {
"API jalan normal"
}
#[launch]
fn rocket() -> _ {
rocket::build()
.mount("/api", routes![api_status])
// Semua file di folder ./public dilayani di bawah prefix "/"
.mount("/", FileServer::from("public"))
}
Praktikum
Daftarkan folder "assets" agar bisa diakses lewat prefix "/static" memakai `FileServer`.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Untuk Single Page Application yang butuh fallback ke `index.html` pada path yang tidak cocok file fisik, pakai `FileServer::from("public").rank(-1)` dikombinasikan dengan catcher 404 yang mengirim `index.html` secara manual lewat `NamedFile::open(...).await` — Rocket tidak punya opsi fallback file sesederhana `not_found_service` di `tower-http`, jadi pola ini sedikit lebih manual dibanding Axum.