如何使用一个主路由创建多个 html 页面?

How to create multiple html pages using one main route?

我正在尝试创建一个包含多个社区供稿的网站,例如一个用于保龄球,另一个用于扑克:localhost:8088/communities/bowling & localhost:8088/communities/poker.

我使用 actix 作为在 Rust 编程语言下运行的网络服务器。

有没有办法让所有在 localhost:8088/communities 下运行的地址遇到相同的 web 文件,这样我就可以只有一个主路由?

然后存储额外的 header,例如 /bowling 或 /poker,这样我就可以提交对服务器的单独请求以获取相关的 post 提要?也许我可以在调用网页时将额外的 header 信息保存在 javascript 变量中? -就像我去 /poker 一样,一个名为 communityType 的变量被设置为 poker。我该怎么做?

因为任何人都不可能为大约 100 多个不同社区中的每一个制作 HTML 页面。

提前感谢您的帮助!

我对这个 crate 不是很熟悉,但是基于 docs 看起来你可以使用 #[get("/route/this/function/will/support")] 来定义路由的处理方式。假设我写得正确,这应该会回复一条小消息,告诉您使用时您所在的社区路线。

use actix_web::{get, web, App, HttpServer, Responder};

#[get("/communities/{name}")]
async fn communities_route(web::Path(name): web::Path<String>) -> impl Responder {
    format!("This is the page for the {:} community!", name)
}

您还可以将其扩展为具有 #[get("/communities/{name}/forums")]#[get("/communities/{name}/{file}")] 的路线,以处理所有社区在每个社区基础上的公共路线。

编辑:

听起来您在初始化 App 以使用 #[get(x)] 时还需要在主函数中包含 .service(communities_route)。如果直接配置服务,您还可以更好地控制路由的处理方式。

这是他们 hello world example 中的一个片段。只要您访问 "/index.html".

以外的任何路由,它就会在服务器上打印请求
async fn index(req: HttpRequest) -> &'static str {
    println!("REQ: {:?}", req);
    "Hello world!"
}

App::new()
.service(web::resource("/index.html").to(|| async { "Hello world!" }))
.service(web::resource("/").to(index))

我建议在 github 上浏览他们的 examples。看起来他们有许多针对许多不同用例的简洁示例。