3个版本
0.1.2 | 2023年4月3日 |
---|---|
0.1.1 | 2023年3月15日 |
0.1.0 | 2023年2月28日 |
#1192 in HTTP服务器
21KB
380 行
Arcanum
该项目仍在开发中,因此尚未完成,并且会有所变化
这是一个我开始创建一个简单框架的个人项目。
待办事项列表
- 基本功能(路由、文件)
- 模板
- 模型(数据库)
- 文档
如何使用
要在cargo.toml文件中添加此库,请使用
[dependencies]
arcanum = "0.1"
serde = { version = "1.0", features = ["derive"] }
。
要实例化和运行基本Web服务器,请使用
let mut server = WebServer::new("127.0.0.1", 7878);
server.run();
其中“127.0.0.1”是服务器的地址,7878是端口号。
要添加一个简单路由,请使用
server.add_simple_route("/", handle_main_route);
其中 handle_main_route
是在main.rs文件中定义的一个函数
要定义handle_main_route所需的一切,例如
#[derive(Serialize)]
struct HomepageContext {
title: String,
}
fn handle_main_route(_req: Request, _res: &mut Response) -> ReturnData {
let context = HomepageContext {
title: "Hello, world!".to_string(),
};
let template = Template::render_template("views/index.html", context);
return ReturnData::Text(template);
}
HomepageContext由模板使用以确定要插入模板的内容,如果认为需要,可以向其中添加90个其他变量。 views/index.html
的内容如下
<!DOCTYPE html>
<html lang="en">
<head>
<title>Home page</title>
</head>
<body>
<h1>{ title }, Title from rust content Object</h1>
</body>
</html>
要添加带有参数的路由,例如id或类似的内容,我们会使用
server.add_route_with_params("/id/:id", handle_id_route);
在这种情况下,/id路由仍然匹配此路由,并且不会传递任何参数(仍在改进中)
在这种情况下,handle_id_route的处理方式如下
#[derive(Serialize)]
struct IdPageContext {
id: String,
}
fn handle_id_route(
_req: Request,
_res: &mut Response,
params: HashMap<String, String>,
) -> ReturnData {
let context = IdPageContext {
id: params["id"].clone(),
};
let template = Template::render_template("views/id.html", context);
return ReturnData::Text(template);
}
我们再次使用模板
<!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
</head>
<body>
<h1>{ id } This should be the id given by the path in the browser</h1>
</body>
</html>
这是id的模板。
辅助函数
serve_static_file
基于提供的路径提供静态文件,不能在add_simple_route函数中用作函数,因此您必须将其包装。有关更多信息,请参阅 examples/basic/main.rs
。
依赖项
~1.3–2.3MB
~49K SLoC