如何避免在Apollo Server V2中的错误对象中包装错误收集在错误响应中



我们将我们的Apollo GraphQl Server V1项目迁移到V2。

我们注意到错误响应格式发生了变化。

在V2中,响应中的错误列表包裹在错误对象中。

但是,在V1中,事实并非如此。我们希望拥有一个一致的标准,而不是在V2中引入包装行为。

我了解,GraphQL服务可以通过下面的链接通过扩展名提供其他字段。链接:https://graphql.github.io/graphql-pec/june2018/#sec-errors

我已经测试了Apollo GraphQl V2,这就是它的实现。

在V1中,它是预期的。

在V1中,我们看到以下错误响应,


{
  "errors": [
    {
      "message": "Field "announcement" must not have a selection since type "String" has no subfields.",
      "locations": [
        {
          "line": 2,
          "column": 16
        }
      ]
    }
  ]
}

在V2中,我们看到以下错误响应,

{
  "error": {
    "errors": [
      {
        "message": "Field "announcement" must not have a selection since type "String" has no subfields.",
        "locations": [
          {
            "line": 2,
            "column": 16
          }
        ],
        "extensions": {
          "code": "GRAPHQL_VALIDATION_FAILED",
          "exception": {
            "stacktrace": [
             ...
            ]
          }
        }
      }
    ]
  }
}

在V1错误响应中,错误列表未包装在错误对象中。在V2中,它包裹在错误对象中。

但是,我的问题是,为什么错误列表在V2中包裹在错误对象中。在V1中,响应中只有错误列表。

我们遵循所有服务(均和非件(的标准,以具有标准格式,并且按照V1版本为单位。但是,现在我们看到它已包裹在错误对象中。

有什么方法可以配置Apollo服务器,以不包装错误对象中的错误列表。

此行为在版本2中没有更改。阿波罗服务器会产生符合规范的响应,并且不会在error对象中包含任何结果错误。取而代之的是,这只是GraphQL操场上的一个已知错误。使用2.0版,Apollo服务器从GraphiQL过渡到GraphQl Playground。GraphIQL没有同样的问题,这就是为什么这看起来像Apollo服务器的错误。检查网络选项卡并查看服务器的实际响应 - 实际上是以预期的格式。

最新更新