nestjs[异常过滤器ExceptionFilter的使用][6]

例子:一例看懂中间件、守卫、管道、异常过滤器、拦截器
接收一个接口请求与响应的整个过程中,必定有可能会遇到各种异常的状况,但凡使用throw 抛出的异常内容都可以通过异常过滤器来获取到其异常内容然后可以自定义修改返回给前端。

异常过滤器概念

nestjs[异常过滤器ExceptionFilter的使用][6]_第1张图片
简单来讲就是捕获系统抛出的所有异常,然后自定义修改异常内容,抛出友好的提示。

内置异常

nestjs[异常过滤器ExceptionFilter的使用][6]_第2张图片
系统提供了不少内置的系统异常类,需要的时候直接使用throw new XXX(描述,状态)这样的方式即可抛出对应的异常,一旦抛出异常,当前请求将会终止。
注意每个异常抛出的状态码有所不同。如:
BadRequestException — 400
UnauthorizedException — 401
ForbiddenException — 403
NotFoundException — 404
NotAcceptableException — 406
RequestTimeoutException — 408
ConflictException — 409
GoneException — 410
PayloadTooLargeException — 413
UnsupportedMediaTypeException — 415
UnprocessableEntityException — 422
InternalServerErrorException — 500
NotImplementedException — 501
BadGatewayException — 502
ServiceUnavailableException — 503
GatewayTimeoutException — 504

自定义异常过滤器

自定义异常通常用于将需要处理的异常截取过来,然后自定义修改返回格式,在返回给前端,这个异常类通常要实现ExceptionFilter接口。
实现方式:
在shared文件夹中定义一个filters文件夹,里面实现一个http-exception.filter的类如下:
nestjs[异常过滤器ExceptionFilter的使用][6]_第3张图片

使用方式:

模块内使用:UseFilters方式

可以直接在指定的路由上使用
nestjs[异常过滤器ExceptionFilter的使用][6]_第4张图片
也可以是在控制器上使用
nestjs[异常过滤器ExceptionFilter的使用][6]_第5张图片

全局使用:

nestjs[异常过滤器ExceptionFilter的使用][6]_第6张图片
注意:但凡使用并且绑定了自定义异常过滤器的内容,将在抛出错误时候被该异常过滤器进行截获然后按照自定义的规则进行过滤,因此一个系统中往往可以自定义一个通用型的全局异常过滤器来过滤自己的异常层打印出相关异常信息

你可能感兴趣的:(nestJS)