首页 > 解决方案 > 即使我有 200 状态,为什么 Apollo 客户端也会忽略响应

问题描述

我正在使用 LocalStack 复制 AWS 服务。

我让我的 Lambda 和 API Gateway 在 LocalStack 中运行,其方式与在 AWS 中运行的方式大致相同。我已经使用 Rest API 工具进行了测试以进行验证。但是,当我使用 Apollo 客户端在浏览器中运行相同的查询时,LocalStack 版本不再有效。

我已经为给定的 GraphQL 尝试了 3 种不同的浏览器,当我通过“网络”选项卡进行检查时,只有 Firefox 显示任何数据。Apollo 总是在位置 1 出现 JSON 解码错误。请求总是返回 200 状态码。

我们的客户端设置是:

import { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client';
import 'cross-fetch/polyfill';

const httpLink = createHttpLink({
  uri: 'http://example.com/graphql',
  credentials: 'include', // Allow other domains too
  fetchOptions: {
    mode:  'no-cors',
  },
});

export const client = new ApolloClient({
  link: httpLink,
  credentials: 'include',
  cache: new InMemoryCache(),
});

Apollo 中是否可能存在一些 CORS 问题?我很确定我在网关中正确设置了标头access-control-allow-origin: http://localhost:3000,, Content-Type: application/json, 等等。

有没有人见过类似这样的错误?

更新

我发现从 切换no-corscors允许它使用已知的良好 URL 工作。
看来:

总之

  1. 此时,LocalStack 无法提供正确的OPTIONS响应,请参阅https://github.com/localstack/localstack/issues/4204,这使我无法使用cors.
  2. no-cors即使我使用已知良好的 URL,使用也会失败。

我已经放弃了 LocalStack 并转而直接使用 AWS 的 API Gateway。

我希望这有帮助。

标签: apollo-clientapi-gatewaylocalstack

解决方案


推荐阅读