我正在尝试使用
apollo-server的自定义错误,似乎我的自定义错误有一个属性(代码),在formatError中不可用.
import ExtendableError from 'es6-error' export default class MyError extends ExtendableError { constructor(args) { let code = Object.keys(args)[0] let message = Object.values(args)[0] super(message) this.code = code } }
我有一个简单的错误处理程序工作原理如下:
let INVALIDREQUEST = 'invalid request' let e = new MyError({INVALIDREQUEST}) console.log(e.code) // => "INVALIDREQUEST"
我遇到了麻烦,因为当我从formatError中记录error.code时它不可用.
formatError: function (error) { console.log(error.code) // => undefined return error }
解决方法
因为Apollo Server使用GraphQL.js,我们可以通过深入挖掘找到解决方案:
https://github.com/graphql/graphql-js/blob/44f315d1ff72ab32b794937fd11a7f8e792fd873/src/error/GraphQLError.js#L66-L69
从本质上讲,GraphQL.js引用实现捕获了解析器中的任何错误,并将它们传递给formatError函数,但它将它们包装在特殊的GraphQL特定错误对象中,具有路径,位置和源等属性.
您可以在formatError中的错误对象的originalError字段中找到您从解析程序中抛出的原始错误,如下所示:
formatError: function (error) { console.log(error.originalError.code) return error }