域名 AXUM.RS 将于2025年10月到期。我们无意再对其进行续费,我们希望你能够接续这个域名,让更多 AXUM 开发者继续受益。
  • 方案1️⃣AXUM.RS 域名 = 3000
  • 方案2️⃣方案1️⃣ + 本站所有专题原始 Markdown 文档 = 5000
  • 方案3️⃣方案2️⃣ + 本站原始数据库 = 5500
如果你有意接续这份 AXUM 情怀,请与我们取得联系。
说明:
  1. 如果有人购买 AXUM.RS 域名(方案1️⃣),或者该域名到期,本站将启用新的免费域名继续提供服务。
  2. 如果有人购买了 AXUM.RS 域名,且同时购买了内容和/或数据库(方案2️⃣/方案3️⃣),本站将关闭。届时我们或许会以另一种方式与你再相遇。

错误处理

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

本章代码在02/错误处理分支。

本章代码在02/错误处理分支。

我们将定义自己的错误类型,在项目内都将使用该自定义错误。同时,我们还会将对该自定义错误实现IntoResponse,以便在 handler 中作为返回值使用。

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

/// 应用错误
pub struct AppError {
    /// 错误信息
    pub message: Option<String>,
    /// 错误原因(上一级的错误)
    pub cause: Option<String>,
    /// 错误类型
    pub error_type: AppErrorType,
}

最后,为这个自定义错误实现IntoResponse

定义自己的Result

/// 定义自己的 Result
type Result<T> = std::result::Result<T, error::AppError>;

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

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