You need to enable JavaScript to run this app. NestJS用GraphQLFederationModule时如何通过formatError区分异常类型
优惠活动
大模型
产品
解决方案
定价
更多

NestJS用GraphQLFederationModule时如何通过formatError区分异常类型

NestJS GraphQL Federation formatError 下四类异常识别方案

所有判断逻辑基于formatError入参GraphQLError对象的extensions.originalError字段展开——这个字段会保留异常抛出时的原始错误对象,不需要通过错误文本匹配做判断,准确率更高。
通用取值逻辑:

formatError: (error: GraphQLError) => {
  // 取原始错误对象
  const originalErr = error.extensions?.originalError as any;
  // 后续分类判断均基于originalErr的结构特征
}

1. Resolver/Service 内部逻辑错误判断

  • 这类错误为应用代码主动抛出的业务类异常,是四类里的兜底分类
  • 判断特征:
    • 命中Nest原生异常体系特征,即originalErr instanceof HttpException,且不满足下文三类第三方错误的结构标记
    • 通常自带Nest标准异常属性:statusCode、response,不存在mongoose、graphql-request、axios类错误的专属结构
    • 注意:如果在业务代码中包装第三方错误时丢失了原错误标记,这类包装后的异常会被误归为内部逻辑错误,需要在包装时预留标记位做识别

2. Mongoose MongoDB操作错误判断

  • 这类错误为Mongoose/MongoDB驱动原生抛出的错误,无需手动包装即可透传到formatError
  • 判断特征:
    • 错误名命中Mongoose生态的固定错误类型:originalErr.name 为 ValidationError、CastError、VersionError、MongoServerError、MongooseError
    • 可通过专属属性精准校验:比如校验类错误自带errors字段存储字段校验规则、MongoDB服务端错误自带code字段(如11000为唯一索引冲突)
    • 适配场景:如果在service层catch了Mongoose错误后重新抛出自定义异常,可在自定义异常上挂载isFromMongoose: true标记,直接识别归类

3. 下游GraphQL服务(graphql-request调用)错误判断

  • 这类错误为graphql-request库原生抛出的下游请求错误,联邦场景下的跨服务解析错误也属于这类
  • 判断特征:
    • 错误名匹配graphql-request的原生错误类型:originalErr.name 为 ClientError、GraphQLClientError
    • 可通过专属结构精准校验:错误对象自带response字段存储下游返回内容,结构为标准GraphQL响应格式(包含errors数组、data字段)
    • 联邦适配:如果是联邦层的跨服务实体解析失败,error.extensions.code会固定为DOWNSTREAM_SERVICE_ERROR,也可直接归类到这类

4. 下游REST服务(axios调用)错误判断

  • 这类错误为axios库原生抛出的请求错误,特征明确判断准确率最高
  • 判断特征:
    • 错误名固定为AxiosError
    • 专属属性校验:错误对象自带isAxiosError: true的固定布尔标记,同时存在config、request、response这三个axios错误独有的字段
    • 适配场景:如果在axios拦截器中包装了错误为Nest异常,需要保留isAxiosError: true标记,避免被误归为内部逻辑错误

分类逻辑优化提示

  • 禁止通过错误文本内容做分类判断:生产环境通常会对错误文本做脱敏处理,很容易出现匹配失效
  • 所有第三方错误的包装链路需要保留原错误的特征标记,避免无标记透传导致分类失效
  • 分类逻辑最后加兜底分支:不匹配前三类特征的错误,默认归为内部逻辑错误

内容的提问来源于stack exchange,提问作者Victor Cheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.07 10:24:04