错误处理

本章我们将自定义错误、自定义一个Result以及让它们作为 handler 的返回值,进行 HTTP 响应。

自定义错误

首先,在src/main.rs声明error模块:

mod error;
/// 错误的类型
pub enum AppErrorType {
    /// 数据库错误
    DbType,
    /// 未找到
    NotFound,
}

/// 应用错误
pub struct AppError {
    /// 错误信息
    pub message: Option<String>,
    /// 错误原因(上一级的错误)
    pub cause: Option<String>,
    /// 错误类型
    pub error_type: AppErrorType,
}
/// 实现 IntoResponse
impl IntoResponse for AppError {
    type Body = Full<Bytes>;
    type BodyError = Infallible;

    fn into_response(self) -> axum::http::Response<Self::Body> {
        let msg = match self.message {
            Some(msg) => msg,
            None => "".to_string(),
        };
        msg.into_response()
    }
}

定义自己的Result

Rust 允许每个项目定义自己的Result,需要注意的是,每个项目只能定义一次。在src/main.rs定义我们自己的Result

下一章我们将自定义响应。

要查看完整内容,请先登录