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

时间:2020-05-06 04:14:08

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

我有一个MERN应用程序,该应用程序使用react钩子和@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属性会向我显示我的查询不正确吗?

P.S。

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

[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一样传递一些东西或像“连接”我的组件一样? idk

1 个答案:

答案 0 :(得分:0)

graphQLErrors仅在服务器返回200状态代码但响应包含一个errors数组时填充–然后,这些errors在{中显示为graphQLErrors挂钩(以及其他地方,例如ErrorLink)返回的{1}}个对象。

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