Apollo 服务器的自定义错误对象
Custom Error Object with 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
}
}
我有一个简单的错误处理程序是这样工作的:
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
}
如何从 formatError
中传播 error
的自定义属性(如 code
)?
因为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
。
您可以在 formatError
中的 error
对象的 originalError
字段上找到解析器抛出的原始错误,如下所示:
formatError: function (error) {
console.log(error.originalError.code)
return error
}
使用 Apollo,您可以轻松地将 graphql 响应中的错误数组复用为 graphql 错误和使用此包机器可读的自定义错误:
通常就够了。您可以在扩展中定义错误代码(2 个参数)、错误消息和任何自定义对象(3 个参数)
throw new ApolloError('User already exist',
'DUPLICATE',
{ 'session': session })
我正在尝试将自定义错误与 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
}
}
我有一个简单的错误处理程序是这样工作的:
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
}
如何从 formatError
中传播 error
的自定义属性(如 code
)?
因为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
。
您可以在 formatError
中的 error
对象的 originalError
字段上找到解析器抛出的原始错误,如下所示:
formatError: function (error) {
console.log(error.originalError.code)
return error
}
使用 Apollo,您可以轻松地将 graphql 响应中的错误数组复用为 graphql 错误和使用此包机器可读的自定义错误:
通常就够了。您可以在扩展中定义错误代码(2 个参数)、错误消息和任何自定义对象(3 个参数)
throw new ApolloError('User already exist',
'DUPLICATE',
{ 'session': session })