如何在GraphQL Server解析器抛出的错误中设置ApolloError.extraInfo?

时间:2017-10-12 05:13:57

标签: graphql-js apollo react-apollo apollo-client apollo-server

我有一个从executegraphql包)调用的解析器,当后端需要报告错误时,它会抛出包含错误的内部类型(AuthError等){ {1}}前端依赖于相应的响应。但是,我遇到了一个问题,即code的结果将此错误包含在execute中,其中包含原始错误GraphQLError,但此部分未传播到客户。

在抛出错误之后以及将结果发送到客户端之前,这是服务器端:(我正在使用套接字。)

enter image description here

以下是客户端:

enter image description here

所以,我的问题是如何在客户端错误中获得此originalError?我假设必须有一种方法来设置客户端所具有的code,但我在文档中没有看到任何内容。

1 个答案:

答案 0 :(得分:0)

为了将来参考;)在下面的文章中,它解释了如何使用GraphQL的formatError函数。

https://codeburst.io/custom-errors-and-error-reporting-in-graphql-bbd398272aeb

在本文中,解决方案是针对express-graphql编码的,但其他库也有类似的方法:

  import express from 'express'
  import graphql from 'express-graphql'
  import schema from './schema'
  import Context from './Context'

  const app = express()

  app.use('/graphql', graphql(req => ({
    schema,
    context: new Context(req),
    formatError(err) {
      return {
        message: err.message,
        code: err.originalError && err.originalError.code, // <-- The trick is here
        locations: err.locations,
        path: err.path
      }
    }
  })))