如何使用Apollo堆栈处理错误

时间:2017-01-25 13:29:30

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

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

我的尝试与GraphiQL一起使用,我在同一个对象中获取错误和数据。

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

1 个答案:

答案 0 :(得分:0)

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

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

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