javascript – Apollo Server的自定义错误对象

前端之家收集整理的这篇文章主要介绍了javascript – Apollo Server的自定义错误对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用 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
}

如何在formatError中传播错误自定义属性(如代码)?

解决方法

因为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
}

猜你在找的JavaScript相关文章