1

在这里,我可以同时使用 graphQLErrors 和 networkError:

  const errorLink = onError(({ operation, graphQLErrors, networkError, forward }) => {
    if (process.env.NODE_ENV !== 'production') {
      if (networkError) {
        console.log(`[Network Error]:`, networkError.message);
      }
      if (graphQLErrors) {
        graphQLErrors.forEach((error) => {
          console.log(`[GraphQL Error]:`, error.message);
        });
      }
    }
  });

但是当试图在 useQuery 中获取这些错误时,在组件级别,只有 networkError 被返回,而 graphQLErrors 是一个空数组:

let { loading, error, data } = useQuery(GET_ALL_PROJECTS, {
 variables: { pageNum: 1, pageSize: 10 },
 fetchPolicy: 'network-only',
 });

例如,我从后端收到一个错误 403 到 onError 函数,但无法在 useQuery 中处理这个错误!

在此处输入图像描述 这个问题怎么解决??

4

1 回答 1

0

Apollo 客户端通过graphQLErrorsnetworkError转发,这是真的。我认为这是假设发生网络错误时,返回数据中的 GraphQL 错误更具技术性,不应向用户显示。如果您真的想访问服务器发送的附加错误信息,您实际上可以在networkError.result.errors.

我在打字稿中提取错误的代码:

const { networkError } = error
const networkGraphQLErrorsPresent =
  networkError &&
  "result" in networkError &&
  networkError.result.errors &&
  networkError.result.errors.length > 0
const extractedError =
  networkGraphQLErrorsPresent ?
    (networkError.result.errors[0] as GraphQLError) :
    undefined
于 2021-09-02T15:51:41.700 回答