- 基于最新版本的 hyper, tokio;
- 支持 Websocket;
- 支持从多个本地目录映射成一个虚拟目录提供服务;
- 中间件系统支持在句柄之前或者之后运行;
- 简单易用的路由系统:
- 路径参数和和支持正则表达式;
- 树状路由系统;
创建一个全新的项目:
cargo new hello_salvo --bin
添加依赖项到 Cargo.toml
[dependencies]
salvo = "0.4"
tokio = { version = "1.0", features = ["full"] }
在 main.rs
中创建一个简单的函数句柄, 命名为hello_world
, 这个函数只是简单地打印文本 "Hello World".
use salvo::prelude::*;
#[fn_handler]
async fn hello_world(_req: &mut Request, _depot: &mut Depot, res: &mut Response) {
res.render_plain_text("Hello World");
}
在 main
函数中, 我们需要首先创建一个根路由, 然后创建一个 Server 并且调用它的 bind
函数:
use salvo::prelude::*;
#[fn_handler]
async fn hello_world(res: &mut Response) {
res.render_plain_text("Hello World");
}
#[tokio::main]
async fn main() {
let router = Router::new().get(hello_world);
let server = Server::new(router);
server.bind(([0, 0, 0, 0], 7878)).await;
}
use salvo::prelude::*;
#[tokio::main]
async fn main() {
let router = Router::new()
.get(index)
.push(
Router::new()
.path("users")
.before(auth)
.post(create_user)
.push(Router::new().path(r"<id:/\d+/>").post(update_user).delete(delete_user)),
)
.push(
Router::new()
.path("users")
.get(list_users)
.push(Router::new().path(r"<id:/\d+/>").get(show_user)),
);
Server::new(router).bind(([0, 0, 0, 0], 7878)).await;
}
#[fn_handler]
async fn index(res: &mut Response) {
res.render_plain_text("Hello world!");
}
#[fn_handler]
async fn auth(res: &mut Response) {
res.render_plain_text("user has authed\n\n");
}
#[fn_handler]
async fn list_users(res: &mut Response) {
res.render_plain_text("list users");
}
#[fn_handler]
async fn show_user(res: &mut Response) {
res.render_plain_text("show user");
}
#[fn_handler]
async fn create_user(res: &mut Response) {
res.render_plain_text("user created");
}
#[fn_handler]
async fn update_user(res: &mut Response) {
res.render_plain_text("user updated");
}
#[fn_handler]
async fn delete_user(res: &mut Response) {
res.render_plain_text("user deleted");
}
Salvo
是一个开源项目,如果想支持本项目, 可以 ☕ 在这里买一杯咖啡.
Salvo 项目采用 MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)