Title here
Summary here
axum是一个基于tokio的web框架。
先在cargo.toml中添加axum依赖,然后运行下面代码
use axum::{
routing::get,
Router,
};
#[tokio::main] // tokio::main宏用于启动异步运行时
async fn main() {
// 创建一个app
let app = Router::new()
// route的第一个参数是路径,第二个参数是方法路由,其参数是处理函数
.route("/", get(|| async { "Hello, World!" })); // 这里处理函数是闭包
// 设置监听地址
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
// 启动服务
axum::serve(listener, app).await.unwrap();
}
curl http://localhost:3000
可以看到Hello, World!,但是后台并没有输出,因为没有日志
在cargo.toml添加tracing和tracing_subcriber依赖,然后代码修改如下
use axum::{
routing::get,
Router,
};
#[tokio::main] // tokio::main宏用于启动异步运行时
async fn main() {
// 初始化tracing日志
tracing_subscriber::fmt::init();
// 创建一个app
let app = Router::new()
// route的第一个参数是路径,第二个参数是方法路由,其参数是处理函数
.route("/", get(|| async { "Hello, World!" })); // 这里处理函数是闭包
// 设置监听地址
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
// 启动服务
axum::serve(listener, app).await.unwrap();
}
use axum::{
routing::get,
Router,
};
#[tokio::main]
async fn main() {
let app = Router::new()
// route的第一个参数是路径,第二个参数是处理函数
// 处理函数可以是闭包
.route("/", get(|| async { "Hello, World!" }))
// 也可以是普通async函数
.route("/foo", get(get_foo).post(post_foo))
.route("/json", get(handle_json);
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
async fn get_foo() {}
async fn post_foo() {}
async fn handle_json() -> Json<Value> {}