graphql - useQuery 错误对象为 graphQLErrors 属性返回空数组

标签 graphql react-hooks react-apollo apollo-client

我有一个 MERN 应用程序,它使用 React hooks 和 @apollo/react-hooks 来执行突变并进行查询。该应用程序按预期工作,但现在我正在尝试处理应用程序的错误处理代码。我有这个查询

export const getStacks = gql`
query {
    stacks{
        title,
        notecards {
            question,
            answer
        },
        id
    }
}
`;

我故意将其更改为这个来打破

export const getStacks = gql`
query {
    storks{
        tile,
        notecards {
            question,
            answer
        },
        id
    }
}
`;

当我这样做并尝试访问 stacksError

const { 加载:isGetStacksLoading,错误:stacksError,数据:stacksData } = useQuery(getStacks);

我在 stacksError 中收到服务器错误,并且没有 graphQLErrors

意思是当我控制台日志stacksError时我在控制台中看到这个

Error: Network error: Response not successful: Received status code 400

在我的 App.js 文件中,我将 createHttpLinkApolloClientApolloProvider 一起使用

有谁知道为什么 stacksError 返回服务器错误并且没有 graphQLErrors 属性来显示我的查询不正确?

附注

我已将 apollo-link-error 添加到我的 App.js 中,当调用它时,我能够解构错误对象并记录 graphQLErrors 中的内容prop 以及 networkError prop 和在控制台中我分别看到:

[GraphQL 错误]:消息:无法在“RootQueryType”类型上查询字段“storks”。您指的是“堆栈”还是“堆栈”?,位置:[对象对象],路径:未定义

[网络错误]:ServerError:响应不成功:收到状态代码 400

这让我更加困惑,因为它表明存在 grapQLErrors 属性,但在我的组件中无法访问内容

哦!我也在我的应用程序中使用react-router,也许我必须传递一些东西或者像“连接”我的组件一样,就像使用redux一样?我不知道

最佳答案

graphQLErrors 仅在服务器返回 200 状态代码但响应包含 errors 数组时才会填充 - 然后会暴露这些 errors作为钩子(Hook)返回的 error 对象中的 graphQLErrors(以及其他地方,例如 ErrorLink)。

如果在执行对服务器的请求时发生错误,则该错误将被视为 networkError。 GraphQL 服务器通常会以 400 状态响应格式错误或无效的查询,这意味着这些错误将被视为 networkError 而不是 graphQLErrors

关于graphql - useQuery 错误对象为 graphQLErrors 属性返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61627289/

相关文章:

reactjs - 如果功能组件的 URL 已更改,则取消刷新

javascript - 使用 Graphcool 管理用户角色

amazon-cognito - 如何修复来自 Apollo 客户端的 Malformed authentication header 错误

javascript - Apollo Server、Graphql - 必须提供查询字符串

graphql - 在 React 中使用 AWS Amplify Appsync 上传图像

rust - Juniper 和 GraphQLEnum - Unresolved 导入 InputValue

reactjs - 如何在类组件中设置 zustand 状态

node.js - 是否可以在 graphQL 执行期间访问特定的查询变量?

react-native - 如何检查 React Native 调试器上的钩子(Hook)

javascript - 从 TypeScript 类型定义或 GraphQL 片段定义生成 JavaScript 空对象