Tho*_*ggi 7 javascript ecmascript-6 graphql apollo-server
我正在尝试使用apollo-server的自定义错误,似乎我的自定义错误有一个code
内部不可用的属性()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
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个简单的错误处理程序工作原理如下:
let INVALIDREQUEST = 'invalid request'
let e = new MyError({INVALIDREQUEST})
console.log(e.code) // => "INVALIDREQUEST"
Run Code Online (Sandbox Code Playgroud)
我遇到了麻烦,因为当我error.code
从内部登录时,formatError
它无法使用.
formatError: function (error) {
console.log(error.code) // => undefined
return error
}
Run Code Online (Sandbox Code Playgroud)
如何从内部传播自定义属性(如code
)?error
formatError
stu*_*ilo 12
因为Apollo Server使用GraphQL.js,我们可以通过深入挖掘找到解决方案:https://github.com/graphql/graphql-js/blob/44f315d1ff72ab32b794937fd11a7f8e792fd873/src/error/GraphQLError.js#L66-L69
从本质上讲,GraphQL.js参考实现捕捉你的解析器的任何错误,并将其传送到formatError
功能,但它包装他们在一个特殊的具体GraphQL错误的对象,具有类似性质path
,positions
和source
.
您可以originalError
在error
对象的字段中找到您从解析程序中抛出的原始错误formatError
,如下所示:
formatError: function (error) {
console.log(error.originalError.code)
return error
}
Run Code Online (Sandbox Code Playgroud)
使用 Apollo,您可以轻松地在 graphql 响应中为 graphql 错误和使用此包机器可读的自定义错误多路复用错误数组:
https://github.com/thebigrededgeek/apollo-errors
归档时间: |
|
查看次数: |
3962 次 |
最近记录: |