我正在尝试创建一个具有多个社区供稿的网站,例如一个用于保龄球,另一个用于扑克,例如:localhost:8088/communities/bowling和localhost:8088/communities/poker。
我将actix用作在Rust编程语言下运行的Web服务器。
有一种方法可以使在localhost:8088/communities下运行的所有地址都遇到相同的Web文件,以便我只能拥有一条主要路由?
然后存储其他标题,例如/bowling或/poker,以便我可以提交对相关帖子供稿的服务器单独请求?调用网页时,也许可以将其他标题信息保存在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}")]
这样的路由来处理所有社区在每个社区基础上的通用路由。编辑:
听起来,在初始化
.service(communities_route)
以使用App
时,您还需要在主函数中包括#[get(x)]
。如果直接配置服务,则还可以更好地控制路由的处理方式。这是他们的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。看起来他们为许多不同的用例提供了一堆简洁的示例。
关于javascript - 如何使用一种主要途径创建多个HTML页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64188566/