Nest.js 中如何使用内置的 HttpException 异常?

推荐答案

在 Nest.js 中,HttpException 是一个内置的异常类,用于处理 HTTP 请求中的错误。你可以通过继承 HttpException 类来创建自定义的异常,或者直接使用它来抛出标准的 HTTP 异常。

使用 HttpException 抛出异常

-- -------------------- ---- -------
------ - -------------- ---------- - ---- -----------------

------
----- --------- -
  ----- ---- - ----- -----------------------
  -- ------- -
    ----- --- ------------------- --- ------- ----------------------
  -
  ------ -----
-

在这个例子中,如果 data 为空,将会抛出一个 HTTP 404 错误,并附带消息 "Data not found"。

自定义异常

你也可以通过继承 HttpException 来创建自定义的异常类:

然后在你的服务或控制器中使用这个自定义异常:

本题详细解读

HttpException 的作用

HttpException 是 Nest.js 中用于处理 HTTP 异常的核心类。它允许你抛出带有特定 HTTP 状态码和错误消息的异常。Nest.js 会自动捕获这些异常,并将其转换为适当的 HTTP 响应。

HttpException 的构造函数

HttpException 的构造函数接受两个参数:

  1. response: 可以是字符串或对象,表示错误消息或更复杂的错误信息。
  2. status: 是一个 HTTP 状态码,通常使用 HttpStatus 枚举来指定。

HttpStatus 枚举

HttpStatus 是一个枚举类型,包含了常见的 HTTP 状态码,如 HttpStatus.OKHttpStatus.NOT_FOUNDHttpStatus.INTERNAL_SERVER_ERROR 等。使用这些枚举值可以使代码更具可读性。

自定义异常的优势

通过继承 HttpException 创建自定义异常类,可以使代码更具模块化和可维护性。你可以在多个地方复用这些异常类,并且可以轻松地修改异常的行为或消息。

异常处理流程

当你在控制器或服务中抛出 HttpException 或其子类时,Nest.js 的异常过滤器会捕获这些异常,并将其转换为 HTTP 响应。响应的状态码和消息将与异常中指定的内容一致。

示例代码解析

在示例代码中,findAll 方法尝试获取数据。如果数据不存在,它会抛出一个 HttpException,状态码为 404,并附带消息 "Data not found"。Nest.js 会自动捕获这个异常,并将其转换为一个 HTTP 404 响应。

纠错
反馈