目录
一、创建Rust项目
使用命令创建项目
cargo new question_bank
二、添加依赖
1.在shell或者命令行中运行以下命令
cargo add anyhow
cargo add serde --featrues derive
cargo add serde-json
cargo add axum
cargo add tokio --features full
cargo add tower-http --features trace
2.直接修改Cargo.toml文件添加依赖
axum = "0.7.5"
serde = { version = "1.0.203", features = ["derive"] }
serde_json = "1.0.118"
tokio = { version = "1.38.0", features = ["full"] }
tower-http = { version = "0.5.2", features = ["trace"] }
三、编写http服务代码
在main.rs 中插入以下代码
use axum::{response::Html, routing::get, Router};
#[tokio::main]
async fn main() {
let app = Router::new().route("/hello", get(get_str));
let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await.unwrap();
println!("服务器启动在:{}", listener.local_addr().unwrap());
axum::serve(listener, app).await.unwrap();
}
async fn get_str() -> Html<&'static str> {
Html("<h1>Hello World</h1>".into())
}
四、添加日志输出
1. 添加以下依赖
- 在shell或命令行中运行以下命令
cargo add tracing
cargo add tracing-subscriber
- 在Cargo.toml [dependencies]中添加内容
tracing = "0.1.40"
tracing-subscriber = "0.3.18"
2. 修改main.rs文件
日志默认输出级别为INFO,
use axum::{response::Html, routing::get, Router};
use tower_http::trace::TraceLayer;
use tracing::info;
#[tokio::main]
async fn main() {
// 初始化日志输出
tracing_subscriber::fmt::init();
// 初始化路由
let app = Router::new()
.route("/hello", get(get_str))
// 配置日志中间件
.layer(TraceLayer::new_for_http());
// 监听tcp端口
let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await.unwrap();
info!("服务器启动在:{}", listener.local_addr().unwrap());
// 启动axum服务
axum::serve(listener, app).await.unwrap();
}
async fn get_str() -> Html<&'static str> {
Html("<h1>Hello World</h1>".into())
}
五、 运行http服务器
1. 在命令行中运行以下命令
- 直接运行
cargo run
- 构建
cargo build
- 发布release版本
cargo build --release