前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NestJs 异常过滤器

NestJs 异常过滤器

作者头像
前端小鑫同学
发布2023-10-16 15:20:17
1920
发布2023-10-16 15:20:17
举报

🎄Hi~ 大家好,我是小鑫同学,资深 IT 从业者,InfoQ 的签约作者,擅长前端开发并在这一领域有多年的经验,致力于分享我在技术方面的见解和心得

基础异常类

HttpException 是 Nest 内置的基础异常类,由状态码和消息体两部分组成。状态码对应HTTP状态码,消息体按类型则分为下面两种情况:

情况1:

string 类型信息体用于对HTTP状态码进行简短的描述,使用方式及返回结果如下:

代码语言:javascript
复制
{
    "statusCode": 403,
    "message": "未授权,禁止访问"
}

情况2:

object 类型消息体用于覆盖整个响应体,返回给用户完全自定义的结果。

代码语言:javascript
复制
{
    "status": 403,
    "message": "未授权,禁止访问",
    "timestamp": "2023-06-05T09:31:06.196Z"
}

自定义异常类

自定义异常类需要继承 Nest 内置的基础异常类(HttpException)后进行定义,体现了面向对象中继承和重写的两大重要概念。

内置异常类

下面列举了Nest 内置的一些异常类:

内置异常类

表示/含义

BadRequestException

表示客户端发送了无效的请求,例如缺少必需的参数或格式不正确的参数。

UnauthorizedException

表示客户端未经授权访问受保护的资源。

NotFoundException

表示请求的资源不存在。

ForbiddenException

表示客户端没有访问请求资源的权限。

NotAcceptableException

表示服务器无法提供客户端请求的内容类型。

RequestTimeoutException

表示客户端请求超时。

ConflictException

表示请求的操作与当前资源状态冲突。

GoneException

表示请求的资源已经不存在。

PayloadTooLargeException

表示请求的负载太大,服务器无法处理。

UnsupportedMediaTypeException

表示请求的媒体类型不受支持。

UnprocessableException

表示请求无法处理,因为它包含无效的数据。

InternalServerErrorException

表示服务器内部错误。

NotImplementedException

表示请求的操作尚未实现。

BadGatewayException

表示网关或代理服务器从上游服务器接收到无效的响应。

ServiceUnavailableException

表示服务当前不可用。

GatewayTimeoutException

表示网关或代理服务器在等待上游服务器响应时超时。

自定义异常过滤器

Nest 内置全局异常过滤器,使用内置的异常类和自定义自异常均会被内置全局异常过滤器拦截,当内置的全局异常过滤器无法满足实际的要求时就需要使用到自定义的异常过滤器了。

如:发生异常时希望将记录异常信息记录到日志系统。就可以通过自定义异常过滤器获取异常层的完全控制权,通过读取底层的 Request 和 Response 对象,获取所需要记录到日志中的信息。

创建过滤器

通过使用 CLI 指令:nest g f http-exception,创建如下的过滤器:

自定义的过滤器通过 @Catch() 装饰器约束所需要被拦截的异常类,当此装饰器不约束特定的异常类时则表示拦截任何一个异常:

通过指定清晰的泛型 T,得到有效的函数签名,在后续的操作中将更加的明确:

一个较为完整的异常过滤器如下:

绑定过滤器

创建好的自定义过滤器同样要通过绑定才能生效,绑定的范围可以是具体控制器的方法、具体的控制器和全局范围。

方法范围和控制器范围绑定方式一致,如下图所示:

全局范围绑定过滤器提供了两种方式,一种是通过app实例调用useGlobalFilters函数绑定,缺点是在任何模块外进行注册的过滤器不能注入依赖;另一种方式就是将过滤器绑定到根模块。

方式1:

方式2:

总结

以上就是 Nest 中异常类及异常过滤器的自定义及使用,异常处理在服务端开发中尤为重要,合理的进行异常的抛出和捕获可以体现出项目架构的合理和健壮性。


如果看完觉得有收获,欢迎点赞、评论、分享支持一下。你的支持和肯定,是我坚持写作的动力~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础异常类
    • 情况1:
      • 情况2:
      • 自定义异常类
      • 内置异常类
      • 自定义异常过滤器
        • 创建过滤器
          • 绑定过滤器
          • 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档