2 个版本 (1 个稳定版)
1.0.0 | 2021 年 9 月 26 日 |
---|---|
0.1.0 | 2021 年 9 月 25 日 |
#1032 在 HTTP 服务器
7KB
96 行
安培
Rust 网络编程宏包
一个简单的包,具有将函数模式绑定到框架 actix-web
的属性。
#[GET("/")]
fn index() {
"nice"
}
变为
#[get("/")]
async fn index() -> impl Responder {
"nice"
}
总共有 3 个属性
#[GET("/"]
#[POST("/")]
#[SERVER]
POST 需要设置为 POST 请求(还有一个专门处理结构体的 POST 请求的特殊类型,即 actix_web::web::Form;)
#[derive(Debug)]
#[derive(Deserialize)] // (yea, use serde)
struct User {
username: String,
email: String,
password: String
}
#[POST("/")]
fn index_analyz(data: Post<User>) {
println!("{:#?}", data);
"nice"
}
SERVER 设置为你的网站主页面
#[SERVER]
fn main() {
HttpServer::new(|| {
App::new()
.service(index)
.service(index_analyz)
})
.bind(("127.0.0.1", 8080))?
.run()
.await
}
以及一些宏设置,用于为响应体设置 HttpResponce。
#[derive(Template)]
#[template(path="../static/index.html")] // askama template render engine
struct MyPage {
content: String
}
#[GET("/a")]
fn foo() {
html!("<h1>html text!</h1>")
load!("compile-time static load of html file use include_str! macro")
template!(MyPage { content: "nice".to_string() })
// expression of struct. implemented for .render() in askama engine
}
还有一个函数,用于使用正则表达式解析 URL(必须在 tokio 运行时中运行,已在该包中重新导入)
let prs; {
let tokioRuntime = Runtime::new().unwrap();
prs = tokioRuntime.spawn(parsing(
"https://your/page/to/parse",
"<h1>[^<]+</h1>|<h2>[^<]+</h2>|<h3>[^<]+</h3>|<h4>[^<]+</h4>")
).await.unwrap();
}
let prs = prs.unwrap();
println!("{:?}", prs);
重新导入的包
actix-web = "3"
regex = "1.5.4"
tokio = { version = "1", features = ["rt", "rt-multi-thread"] }
actix-files = "0.3"
依赖
~24–37MB
~676K SLoC