【问题标题】:CORS issue performing api calls in react/redux application在 react/redux 应用程序中执行 api 调用的 CORS 问题
【发布时间】:2016-10-21 15:26:39
【问题描述】:

我试图实现mailchimp api,但遇到了跨域问题,chrome 中出现如下错误:

XMLHttpRequest 无法加载 https://us9.api.mailchimp.com/3.0/members。 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://example.com” 使用权。响应的 HTTP 状态代码为 501。

经过一些研究,我发现我进行的 api 调用是从浏览器发出的(我只是从我的一个操作中调用 api),但要解决这个问题,它们需要在服务器上进行。

因此,我试图找出一种方法来从我的操作内部的服务器调用 api,以绕过此问题。

编辑: 我发现的解决方案之一是为此使用 jsonp,但我也不得不放弃它,因为我无法使用它进行身份验证。

【问题讨论】:

  • quite a few Node包可以和Mailchimp交互。
  • 您可以使用node-http-proxy 代理MailChimp API。
  • @Steven 这看起来是一个很好的解决方案,我尝试浏览他们的文档,但仍然不明白它应该如何设置,你能在这里提供一个例子作为答案吗?跨度>

标签: javascript node.js api reactjs redux


【解决方案1】:

我找到的解决方案是通过express代理api调用,方式如下:

在您的快速配置中:

import request from 'request'

app.use('/api', function (req, res) {
  let url = 'your_api_url' + req.url
  req.pipe(request(url)).pipe(res)
})

这允许您做的不是在您的组件中调用https://myapi.com/endpoint,而是使用/api/endpoint,这样express 将用您的api url 替换您服务器上的所有/api 实例,并从服务器本身。

【讨论】:

  • 我在调用 google places api 时遇到了类似的问题。我如何从我的 React 操作中调用它。现在我有这样的东西。 let url = ${GOOGLE_URL}/textsearch/json?query=${location}&pagetoken=${nextPageToken}&radius=500&key=${GOOGLE_KEY} 我将如何在通话中使用上述快速 API。
猜你喜欢
  • 1970-01-01
  • 2019-10-03
  • 2016-12-11
  • 2019-02-07
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 2019-09-27
  • 2016-05-01
相关资源
最近更新 更多