10

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"

error.code内部からログインすると利用できないので困ってformatErrorいます。

formatError: function (error) {
  console.log(error.code) // => undefined
  return error
}

内からのカスタム プロパティ ( などcode)を伝播するにはどうすればよいですか?errorformatError

4

3 に答える 3

14

Apollo Server は GraphQL.js を使用しているため、そこを深く掘り下げることで解決策を見つけることができます: https://github.com/graphql/graphql-js/blob/44f315d1ff72ab32b794937fd11a7f8e792fd873/src/error/GraphQLError.js#L66-L69

基本的に、GraphQL.js リファレンス実装は、リゾルバーでエラーをキャッチして関数に渡しますが、 、、 などformatErrorのプロパティを持つ特別な GraphQL 固有のエラー オブジェクトにそれらをラップします。pathpositionssource

次のように、オブジェクトのoriginalErrorフィールドでリゾルバーからスローした元のエラーを見つけることができます。errorformatError

formatError: function (error) {
  console.log(error.originalError.code)
  return error
}
于 2016-10-19T08:06:01.577 に答える