内置中间件

Silent 提供了多种内置中间件,基于洋葱模型实现,可以直接使用:

1. 请求时间日志

记录每个请求的处理时间,通过洋葱模型在请求前后记录时间戳:

use silent::middleware::RequestTimeLogger;

// 创建基础日志记录器
let logger = RequestTimeLogger::new();

// 可以自定义日志格式和输出方式
let custom_logger = RequestTimeLogger::new()
    .with_format(|method, uri, time| {
        format!("[{}] {} - {}ms", method, uri, time.as_millis())
    });

2. 异常处理

全局异常处理中间件,用于统一处理应用中的错误,支持自定义错误处理逻辑:

use silent::middleware::ExceptionHandler;
use silent::error::Error;

// 基础异常处理器
let exception_handler = ExceptionHandler::new();

// 自定义错误处理逻辑
let custom_handler = ExceptionHandler::new()
    .on_error(|err: Error| async move {
        // 自定义错误响应
        Response::builder()
            .status(err.status_code())
            .json(&serde_json::json!({
                "code": err.status_code().as_u16(),
                "message": err.to_string()
            }))
    });

3. 跨域资源共享 (CORS)

处理跨域请求,支持灵活的CORS配置:

4. 超时处理

为请求设置超时限制,防止长时间运行的请求占用系统资源:

使用示例

这些内置中间件基于Silent的中间件系统实现,遵循洋葱模型的执行流程。每个中间件都可以:

  1. 在请求处理前执行预处理逻辑

  2. 在请求处理后执行后处理逻辑

  3. 支持灵活的配置选项

  4. 可以组合使用,按注册顺序依次执行

中间件的执行顺序很重要,建议将通用的处理(如日志、异常处理)放在外层,将特定的处理(如认证、授权)放在内层。每个中间件都可以进行自定义配置,以满足特定的应用需求。

Last updated