apollo-client - 即使我有 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-cors
到cors
允许它使用已知的良好 URL 工作。
看来:
- 设置时
cors
,进行预检检查。此OPTIONS
请求提供了许多响应标头,其中Access-Control-Allow-Origin
必须将其设置为请求域。 - 当
no-cors
设置为没有预检检查时,无论出于何种原因,响应都会被拒绝,即使它也包含正确的Access-Control-Allow-Origin
. 我使用与cors
option一起使用的 URL 进行了测试。
总之
- 此时,LocalStack 无法提供正确的
OPTIONS
响应,请参阅https://github.com/localstack/localstack/issues/4204,这使我无法使用cors
. no-cors
即使我使用已知良好的 URL,使用也会失败。
我已经放弃了 LocalStack 并转而直接使用 AWS 的 API Gateway。
我希望这有帮助。
解决方案
推荐阅读
- javascript - 使用 proj4leaflet 时出现错误“无效的 LatLng 对象:(NaN,86.06925048939979)”
- ssl - HTTPS 加密的工作原理是什么?
- reactjs - React + Typescript + Styled Components 将道具传递给关键帧和条件
- python - Python Matplotlib的问题----只画了一部分情节
- typescript - 如何在打字稿中打开泛型对象的属性?
- python-3.x - 哪个文件夹在 python 模块发现中具有特殊作用?
- apache - 赞普。Apache 服务器无法启动,因为缺少 api-ms-win-localization-|1-1-0.dll 文件
- twilio - Twilio API 错误请求 (20001)
- flutter - 颤振如何使用alertDialog?
- javascript - 如何每次在给定的字符串文本中生成一个新的随机字符串,满足正则表达式?