内容提要
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() 装饰器不传入参数来捕获所有异常,并返回状态码和时间戳等信息。