Nestjs 框架教程(第七篇:异常过滤器)

Nestjs 框架教程(第七篇:异常过滤器)

💡 原文中文,约3900字,阅读约需10分钟。
📝

内容提要

Nest 框架提供了异常处理机制,默认使用 HttpException 处理未处理的异常。可以自定义异常类和过滤器,动态返回错误信息。使用 @UseFilters 装饰器可在控制器方法中应用过滤器,支持全局和局部作用域。通过 @Catch() 装饰器可捕获所有异常,继承 BaseExceptionFilter 可复用内置逻辑。

🎯

关键要点

  • Nest 框架提供了异常处理机制,默认使用 HttpException 处理未处理的异常。
  • 未识别的异常会返回状态码 500 和消息 'Internal server error'。
  • 可以手动抛出异常并自定义返回状态值和错误信息。
  • 建议实现自定义异常类以便于抛出。
  • Nest 内置了多种集成自 HttpException 的异常类。
  • 异常过滤器可以动态添加参数到异常返回值。
  • 使用 @UseFilters 装饰器可以在控制器方法中应用过滤器,支持不同作用域。
  • 全局过滤器可以通过根模块注册,解决依赖注入问题。
  • 使用 @Catch() 装饰器可以捕获所有异常,默认返回状态码 500。
  • 可以继承 BaseExceptionFilter 来复用内置的过滤器逻辑。

延伸问答

Nest 框架如何处理未处理的异常?

Nest 框架默认使用 HttpException 处理未处理的异常,未识别的异常会返回状态码 500 和消息 'Internal server error'。

如何自定义异常类以便于抛出?

可以通过继承 HttpException 创建自定义异常类,例如:export class ForbiddenException extends HttpException { constructor() { super('Forbidden', HttpStatus.FORBIDDEN); } }。

如何在控制器方法中应用异常过滤器?

可以使用 @UseFilters 装饰器在控制器方法中应用过滤器,例如:@UseFilters(HttpExceptionFilter) async create() { throw new ForbiddenException(); }。

Nest 框架内置了哪些异常类?

Nest 内置了多种集成自 HttpException 的异常类,包括 BadRequestException、UnauthorizedException、NotFoundException 等。

如何实现全局异常过滤器?

可以在根模块中注册全局过滤器,例如:@Module({ providers: [{ provide: APP_FILTER, useClass: HttpExceptionFilter, },], })。

如何捕获所有异常并返回相应信息?

可以使用 @Catch() 装饰器不传入参数来捕获所有异常,并返回状态码和时间戳等信息。

➡️

继续阅读