1

我正在使用 Apollo Graphql 创建一个 React 应用程序,但我在使用 Apollo Link Rest 时遇到了一些问题。问题是在我的应用程序中间我必须发出一个 REST 请求,但是这个请求可能成功并返回状态码 = 200,也可能失败,返回状态码 = 400。

如果出现 400 错误,我的应用程序必须向最终用户显示在此请求正文中返回的错误消息。但是,当发生错误时,Apollo Link Rest 只会引发异常,但不会将响应正文返回给我。

当 Apollo Link Rest 出现错误时,我有办法获取响应正文吗?我以为我可以从result变量中得到它,但是由于 Apollo 抛出了异常,所以这个变量永远不会改变。

这是我的代码:

    const result = await context.client.query<MyQuery>({
      query: MyQuery,
      variables: {
        input: {
          companyId: variables.companyId,
        },
      },
    });
query MyQuery($input: MyQueryInput!) {
  myQuery(input: $input) @rest(
    type: "QueryResponse",
    method: "POST"
    path: "v1/my-query"
  ) {
    id
    minimumPreparationTime
    maximumPreparationTime
    extras {
      id
      optional
      key
    }

    warning
    error {
      id
      type
      message
    }
  }
}
4

2 回答 2

2

扩展 Greg 注释和apollo-link-error,您可以从networkError.result.message.

于 2020-04-11T18:38:48.727 回答
0

您可以使用它apollo-link-error来捕获和处理服务器错误、网络错误和 GraphQL 错误。如果需要,您应该能够有条件地设置response.errors

    import { onError } from "apollo-link-error";

    const link = onError(({ graphQLErrors, networkError, response, operation }) => 
    {
       if (graphQLErrors)
       graphQLErrors.map(({ message, locations, path }) =>
           console.log(
            `[GraphQL error]: Message: ${message}, Location: ${locations}, Path: 
            ${path}`,
          ),
        );

     if (networkError) console.log(`[Network error]: ${networkError}`);

    response.error = // set error property here 
});

值得注意的是,Apollo 公开了一个errorPolicy选项,默认值为none. all根据文档, 可以修改策略,

是通知用户潜在问题的最佳方式,同时仍显示来自服务器的尽可能多的数据。它将数据和错误都保存到 Apollo 缓存中,以便您的 UI 可以使用它们。

于 2019-10-03T18:08:31.083 回答