用一个最简单的 Axum Web 服务,演示 State(st): State<AppState> 这种写法

最后发布时间:2026-10-29 14:37:49 浏览量:

use axum::{
    extract::State,
    routing::get,
    Router,
};

#[derive(Clone)]
struct AppState {
    app_name: String,
}

// 重点看这里
async fn hello(State(st): State<AppState>) -> String {
    format!("Hello from {}!", st.app_name)
}

#[tokio::main]
async fn main() {
    let state = AppState {
        app_name: String::from("My Axum App"),
    };

    let app = Router::new()
        .route("/", get(hello))
        .with_state(state);

    let listener = tokio::net::TcpListener::bind("127.0.0.1:3000")
        .await
        .unwrap();

    println!("Listening on http://127.0.0.1:3000");

    axum::serve(listener, app).await.unwrap();
}

let state = rodent_act::web::AppState {
    jobs: {
        let jobs = std::sync::Arc::new(
            rodent_act::web::JobManager::new(out_dir, media_dir)
        );

        jobs.load_existing();
        jobs
    },
    log_tx,
};
jobs := web.NewJobManager(outDir, mediaDir)

// 加载上一次运行时持久化的任务
jobs.LoadExisting()

state := web.AppState{
    Jobs:  jobs,
    LogTx: logTx,
}

state := web.AppState{
    Jobs: func() *web.JobManager {
        jobs := web.NewJobManager(outDir, mediaDir)
        jobs.LoadExisting()
        return jobs
    }(),
    LogTx: logTx,
}
快捷入口
Rust 思维导图 浏览PDF 下载PDF
分享到:
标签