【问题标题】:useQuery error object returns empty array for graphQLErrors propertyuseQuery 错误对象为 graphQLErrors 属性返回空数组
【发布时间】:2020-08-20 22:46:22
【问题描述】:

我有一个 MERN 应用程序,它使用反应钩子和 @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 { loading: isGetStacksLoading, error: stacksError, data: 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 道具以及 networkError 道具和控制台中的内容分别见:

[GraphQL error]: Message: Cannot query field "storks" on type "RootQueryType". Did you mean "stacks" or "stack"?, Location: [object Object], Path: undefined

[Network Error]: ServerError: Response not successful: Received status code 400

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

哦!我也在为我的应用程序使用 react-router,也许我必须像使用 redux 一样传递一些东西或像“连接”我的组件?身份证

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    猜你喜欢
    • 2022-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多