【问题标题】:How to handle Errors with the Apollo stack如何使用 Apollo 堆栈处理错误
【发布时间】:2017-06-10 17:01:36
【问题描述】:

我正在使用带有 graphql-server-expressapollo-client 的 Apollo Stack。

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

到目前为止,我的主要问题是身份验证,因此我以错误响应。

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 不是 catch 函数中的错误对象。

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

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

【问题讨论】:

    标签: graphql apollo apollostack apollo-server apollo-client


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-01-28
      • 2016-05-23
      • 1970-01-01
      • 2018-07-09
      • 2012-08-06
      • 2017-06-23
      • 2018-08-31
      • 1970-01-01
      • 2020-12-27
      相关资源
      最近更新 更多