返回

RUST web框架axum快速入门教程5: 中间件

后端

前言

在前面的章节中,我们已经学习了如何使用axum框架来构建一个简单的web应用程序。我们还学习了如何使用axum的路由系统来定义我们的应用程序的路由。在这一章中,我们将学习如何使用axum的中间件来对我们的应用程序进行一些增强。

什么是中间件

中间件是一个在应用程序中处理请求和响应的软件组件。中间件可以用来做很多事情,比如:

  • 验证请求
  • 记录请求和响应
  • 压缩响应
  • 添加安全标头

axum中的中间件

axum中的中间件与其他框架中的中间件非常相似。它们都是一个函数,该函数接受一个Service类型作为参数,并返回一个新的Service类型。新的Service类型将被用于处理请求和响应。

axum中的中间件可以使用Layer类型来定义。Layer类型是一个函数,该函数接受一个Service类型作为参数,并返回一个新的Service类型。新的Service类型将被用于处理请求和响应。

如何使用中间件

要使用中间件,我们需要在我们的应用程序中注册它。我们可以通过在main函数中调用app.middleware()方法来注册中间件。

use axum::{
    http::StatusCode,
    middleware,
    response::IntoResponse,
    routing::{get, post},
    Router,
};

#[tokio::main]
async fn main() {
    let app = Router::new()
        // 注册中间件
        .middleware(middleware::from_fn(|ctx, next| {
            // 中间件处理逻辑
            async {
                // 调用下一个中间件或处理程序
                let response = next(ctx).await;

                // 返回响应
                response.into_response()
            }
        }))
        // 定义路由
        .route("/", get(|| async { "Hello, World!" }))
        .route("/post", post(|| async { "Post Request!" }));

    // 启动应用程序
    axum::Server::bind(&"0.0.0.0:3000").serve(app).await.unwrap();
}

在上面的代码中,我们注册了一个简单的中间件,该中间件将在每个请求和响应被处理之前和之后被调用。

常见的中间件

axum中内置了许多常见的中间件,我们可以直接使用。这些中间件包括:

  • middleware::from_fn():用于注册自定义中间件
  • middleware::compress():用于压缩响应
  • middleware::add_response_header():用于添加响应头
  • middleware::from_extractor():用于从请求中提取数据
  • middleware::from_filter():用于过滤请求
  • middleware::from_err_handler():用于处理错误

总结

中间件是一个非常强大的工具,可以用来对我们的应用程序进行增强。axum中的中间件与其他框架中的中间件非常相似,它们都是一个函数,该函数接受一个Service类型作为参数,并返回一个新的Service类型。新的Service类型将被用于处理请求和响应。我们可以通过在我们的应用程序中注册中间件来使用它。axum中内置了许多常见的中间件,我们可以直接使用。