返回

玩转NestJS过滤器,轻松搞定异常处理

前端

NestJS 过滤器:处理异常的利器

NestJS 过滤器是管理未手动捕获异常的有效工具。使用过滤器,我们可以轻松处理异常,为用户提供友好的错误消息。

深入了解 NestJS 过滤器的运作原理

基本用法

  1. 创建过滤器类:src/filters/ 目录中创建 HttpExceptionFilter.ts 文件。

  2. 导入必需品: 导入 HttpExceptionArgumentsHost

  3. 实现 catch() 方法: 在这个方法中处理异常。

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

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    // 处理异常
  }
}
  1. 导入过滤器:src/app.module.ts 中导入 HttpExceptionFilter

  2. 注册过滤器:imports 数组中添加 HttpExceptionFilter

import { HttpExceptionFilter } from './filters/HttpExceptionFilter';

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

高级用法

除了基本用法,NestJS 过滤器还提供了一些高级功能:

  • 指定异常类型: 使用 @Catch() 装饰器指定要捕获的异常类型。

  • 获取请求和响应对象: 使用 @ArgumentsHost() 装饰器获取请求和响应对象。

  • 注入依赖项: 使用 @Inject() 装饰器注入依赖项。

import { HttpException, ArgumentsHost, Inject } from '@nestjs/common';
import { Catch, ExceptionFilter } from '@nestjs/common';
import { Logger } from 'nestjs-pino';

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
  constructor(@Inject(Logger) private readonly logger: Logger) {}

  catch(exception: HttpException, host: ArgumentsHost) {
    // 处理异常
    this.logger.error(exception.message, exception.stack);
  }
}

NestJS 过滤器:异常处理利器

NestJS 过滤器是处理未手动捕获异常的强大工具。使用过滤器,我们可以轻松处理异常,并为用户提供友好的错误消息。

是时候掌握 NestJS 过滤器的艺术了。使用它们来增强你的应用程序,让它们更加健壮!

常见问题解答

  1. 什么时候使用过滤器?
    过滤器用于处理未手动捕获的异常,提供统一的错误处理机制。

  2. 如何指定捕获哪些类型的异常?
    使用 @Catch() 装饰器指定要捕获的异常类型。

  3. 如何获取请求和响应对象?
    使用 @ArgumentsHost() 装饰器获取请求和响应对象。

  4. 如何注入依赖项?
    使用 @Inject() 装饰器注入依赖项。

  5. 使用过滤器的优势是什么?
    过滤器简化了错误处理,提供了统一的错误消息,并提高了应用程序的健壮性。