如何使用 Apollo 堆栈处理错误

How to handle Errors with the Apollo stack

我将 Apollo Stack 与 graphql-server-expressapollo-client 一起使用。

因为我的后端不完美,可能会出现错误,因此我必须响应该路径的错误请求。

到目前为止我的主要问题是身份验证,因此我回复了一个错误。

return new Error(`${data.status}: ${data.statusText} @ ${data.url}`)

前端使用apollo-client查询数据

return apollo
        .query({query: gql`
            query {
                ${query}
            }`,
            forceFetch: forceFetch
        })
        .then(result => { debugger; return result.data })
        .catch(error => { debugger; console.error(error); });

但是如果一个 属性 查询响应错误,则只会调用 catch 函数。 即使是剩余属性的数据也会被传输,我在 Chrome 开发工具的网络选项卡中看到了这一点。 In is not error object in the catch function.

我的尝试在 GraphiQL 上运行良好,我在同一个对象中得到了错误和数据。

那么如何在不丢失整个请求的情况下为 属性 抛出错误?

您可以在承诺的 then 部分手动查找 result.error,避免使用 catch。另外 我认为 你也可以在 catch 调用之后添加一个 then 来处理这种特殊情况。

除此之外,您还可以在 GraphQL 服务器中使用 formatError 来手动过滤和格式化错误消息。该函数的主体如下,您可以访问抛出的 Error.

formatError: (error) => {
  return {
    name: error.name,
    mensaje: error.message
  }
}