返回

Nestjs 异常过滤器:保护应用免受未处理错误的影响

后端

Nest.js 异常过滤器:全面指南

简介

在 Nest.js 的世界中,异常过滤器是一个必不可少的工具,用于捕获和处理未处理的异常。这些过滤器可以帮助您记录错误信息、向用户显示友好错误消息,甚至执行其他必需的操作,确保您的应用程序运行顺畅、稳定。

异常过滤器的工作原理

当发生异常时,Nest.js 会根据异常类型和作用域来寻找合适的异常过滤器。它从控制器、服务一直搜索到整个应用程序。如果找到匹配的过滤器,则交由它处理异常。如果没有,异常将不断向上冒泡,直到被处理或到达应用程序根目录。

创建异常过滤器

创建异常过滤器非常简单。让我们使用一个示例来捕获所有 HttpException

import { Catch, ExceptionFilter, ArgumentsHost, HttpException } from '@nestjs/common';

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse();
    const request = ctx.getRequest();
    const status = exception.getStatus();

    response.status(status).json({
      statusCode: status,
      message: exception.message,
      timestamp: new Date().toISOString(),
    });
  }
}

注册异常过滤器

为了使用异常过滤器,您需要在 app.module.ts 中注册它:

import { Module } from '@nestjs/common';
import { HttpExceptionFilter } from './http-exception.filter';

@Module({
  providers: [HttpExceptionFilter],
})
export class AppModule {}

异常过滤器的优势

异常过滤器为您的应用程序提供了许多好处:

  • 错误处理的一致性: 异常过滤器确保以一致的方式处理错误,无论它们发生在哪里。
  • 用户友好的错误消息: 过滤器可以定制错误消息,使其对用户更友好。
  • 错误记录: 过滤器可以轻松地记录错误信息,帮助您调试和改进应用程序。
  • 应用程序稳定性: 通过捕获和处理未处理的异常,过滤器有助于确保您的应用程序保持稳定。

结论

异常过滤器是 Nest.js 中一个强大而实用的工具,可以显著增强您的应用程序的错误处理能力。通过实现自定义过滤器,您可以个性化错误消息、记录错误并确保应用程序的稳定运行。

常见问题解答

  1. 异常过滤器必须作用于特定控制器吗?

不,异常过滤器可以作用于控制器、服务或整个应用程序。

  1. 如果有多个异常过滤器同时匹配,会发生什么?

Nest.js 会按照过滤器注册的顺序来调用它们。

  1. 如何记录异常过滤器捕获的错误?

可以使用 @nestjs/core 包中的 Logger 服务来记录错误信息。

  1. 如何创建自定义异常类?

您可以通过扩展 HttpException 类来创建自定义异常类。

  1. Nest.js 中内置了哪些异常过滤器?

Nest.js 内置了一些异常过滤器,包括 HttpExceptionFilterValidationErrorFilterParseErrorFilter