useQuery 错误对象为 graphQLErrors 属性返回空数组
Posted
技术标签:
【中文标题】useQuery 错误对象为 graphQLErrors 属性返回空数组【英文标题】:useQuery error object returns empty array for graphQLErrors property 【发布时间】: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 文件中,我使用 createHttpLink
和 ApolloClient
和 ApolloProvider
有谁知道为什么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 一样传递一些东西或像“连接”我的组件?身份证
【问题讨论】:
【参考方案1】:graphQLErrors
仅在服务器返回 200 状态代码但响应包含 errors
数组时才会填充 - 然后这些 errors
在挂钩返回的 error
对象中显示为 graphQLErrors
(和其他地方,例如 ErrorLink)。
如果在执行对服务器的请求时发生错误,则会将错误视为networkError
。 GraphQL 服务器通常以 400 状态响应格式错误或无效的查询——这意味着这些错误将被视为 networkError
而不是 graphQLErrors
。
【讨论】:
这可以追踪,但是 apollo 文档中的这个示例为什么显示当查询格式错误时,errors 对象仍然具有 graphQLError 属性? apollographql.com/docs/react/data/error-handling 。我误解了这个例子吗? 对于其他调查此问题的人。上述答案在技术上是正确的。通过执行此 github 问题的评论 github.com/apollographql/apollo-link/issues/… 中提到的操作,我能够访问我的错误以上是关于useQuery 错误对象为 graphQLErrors 属性返回空数组的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 Apollo 客户端 useQuery 中的错误传播?
Apollo useQuery 钩子不会使用 writeQuery() 方法从缓存中获取更新。没有看到错误