0

Rocket が提供するパス (の下/admin) の下に Vue アプリをパッケージ化しようとしています。私は次のマッチャーを書きました:

#[get("/admin/<path..>")]
fn admin_panel(_admin: AdminUser, path: Option<PathBuf>) -> Option<NamedFile> {
    match path {
        Some(admin_path) => match NamedFile::open(Path::new("admin/").join(admin_path)).ok() {
            Some(admin_file) => Some(admin_file),
            // if the file is not found, we fallback onto admin/index.html, so the client routing can kick in
            None => NamedFile::open(Path::new("admin/index.html")).ok()
        },
        None => NamedFile::open(Path::new("admin/index.html")).ok()
    }
}

#[get("/admin/<_path..>", rank = 2)]
fn admin_panel_user(_user: AuthenticatedUser, _path: Option<PathBuf>) -> &'static str {
    "Sorry, you must be an administrator to access this page."
}

#[get("/admin/<_path..>", rank = 3)]
fn admin_panel_redirect(_path: Option<PathBuf>) -> Redirect {
    Redirect::to(uri!(login::login))
}

しかし、これだと にアクセスしようとすると/admin404 になってしまいます。"/admin" だけで新しいルートを作成して にリダイレクトする必要があります/admin/index.htmlが、これは理想的ではありません。

PathBufをとして定義するとオプションになると思いましたOptionが、うまくいかないようです。

リクエストにパスがある場合とない場合の両方でリクエストマッチャーを機能させるにはどうすればよいですか?

4

1 に答える 1