如何将Actix-Web应用的状态管理为?
摘要:一、概述 Actix Web 提供了强大的应用状态管理机制,让你能够在整个应用范围内安全地共享数据。 核心状态管理方式: 应用状态会被同一作用域内的所有路由和资源共享,可以通过 web::Data<T&am
一、概述
Actix Web 提供了强大的应用状态管理机制,让你能够在整个应用范围内安全地共享数据。
核心状态管理方式:
应用状态会被同一作用域内的所有路由和资源共享,可以通过 web::Data<T> 提取器来访问,其中 T 代表状态数据的类型。
二、共享状态(App Data)
修改主代码 src/main.rs
use actix_web::{web,get,post, App, HttpResponse, HttpServer};
use std::sync::Mutex;
struct AppState {
counter: Mutex<i32>,
app_name: String,
}
#[get("/count")]
async fn get_count(data: web::Data<AppState>) -> HttpResponse {
let count = data.counter.lock().unwrap();
HttpResponse::Ok().json(serde_json::json!({
"app": data.app_name,
"count": *count
}))
}
#[post("/increment")]
async fn increment(data: web::Data<AppState>) -> HttpResponse {
let mut count = data.counter.lock().unwrap();
*count += 1;
HttpResponse::Ok().json(serde_json::json!({
"new_count": *count
}))
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
env_logger::init_from_env(env_logger::Env::default().default_filter_or("info"));
log::info!("Starting HTTP server on http://127.0.0.1:8080");
let app_state = web::Data::new(AppState {
counter: Mutex::new(0),
app_name: String::from("Actix-Web Demo"),
});
HttpServer::new(move || {
App::new()
.app_data(app_state.clone())
.service(get_count)
.service(increment)
})
.bind(("127.0.0.1", 8080))?
.run()
.await
}
测试运行,访问接口:http://127.0.0.1:8080/count
使用postman调用post接口:http://127.0.0.1:8080/increment
三、数据库连接池
这里以mysql 8为例,来演示如何连接数据库。
