我有一个 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 文件中,我将 createHttpLink
与 ApolloClient
和 ApolloProvider
一起使用
有谁知道为什么 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/