Study
Rocket

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`.

Editor Latihan

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.