错误扩展码与结构化异常:统一 GraphQL 错误协议
设计一套可扩展的错误代码体系,包含用户友好的消息、字段路径、调试信息,并支持国际化。 · 难度:入门 · +10XP
错误扩展码与结构化异常
GraphQL 默认错误只包含 message 与 path,无法满足客户端精确处理。本教程将教你定义全局错误码枚举(如 UNAUTHORIZED, NOT_FOUND, VALIDATION_ERROR),并在自定义 ApolloError 或 graphql-error-classes 中携带 extensions.code, extensions.field, extensions.i18n_key。我们会实现一个格式化函数,将数据库异常、验证错误统一转换为标准格式,并允许开发者在 resolver 中通过 throw new BusinessError('INSUFFICIENT_BALANCE', { userId }) 抛出结构化错误。
class BusinessError extends GraphQLError {
constructor(code, details) {
super(code);
this.extensions = { code, details, timestamp: Date.now() };
}
}
throw new BusinessError('INSUFFICIENT_BALANCE', { balance: 10, required: 50 });