【问题标题】:Enabling CORS in Create React App utility在 Create React App 实用程序中启用 CORS
【发布时间】:2018-06-02 19:48:12
【问题描述】:

我需要在使用 create-react-app 实用程序创建的 React 中使用 CORS 节点模块。

由于它是一个实用程序,我无法在内部进行调整并将 CORS 注入到预配置的 EXPRESS 模块中。

我们怎样才能做到这一点?

【问题讨论】:

  • 你必须使用这个插件:npmjs.com/package/cors
  • 我知道,但我无法将它与 create-react-app 集成 :-(
  • @challenge 你不必使用它。请参阅下面的答案。

标签: express cors create-react-app


【解决方案1】:

如果你需要这个来进行开发,并且想从你的 react 应用程序中访问一个 api,但遇到这样的错误-

Failed to load http://localhost:8180/tables: 
The 'Access-Control-Allow-Origin' header has a value 'http://localhost:8180'
that is not equal to the supplied origin. Origin 'http://localhost:3000' is
therefore not allowed access. Have the server send the header with a valid
value, or, if an opaque response serves your needs, set the request's mode to
'no-cors' to fetch the resource with CORS disabled.

然后你可以很容易地让 create-react-app 服务器将你的请求代理到你的 api 服务器。

create-react-app 使用 webpack 开发服务器为您的 react 应用程序提供服务。

因此,如果您的 React 应用程序由 http://localhost:3000 提供服务,并且您要连接的 api 位于 http://localhost:8180/tables,您可以简单地将 proxy 值添加到您的 React 应用程序的 package.json 文件中,如下所示-

proxy: "http://localhost:8180",

然后从你的 react 应用调用你的 api

fetch('/tables').then(....)

请求将被发送到 create-react-app 服务器,该服务器会将其发送到 api 服务器并为您返回结果。

这里有完整的细节Proxying API Requests in Development

【讨论】:

  • 感谢您的回答,但链接已更改。新的是:facebook.github.io/create-react-app/docs/…
  • 如果 api 托管在另一个域中怎么办?这似乎是同一个域
  • @IanSmith 这个答案去哪儿了?
  • @EnricoBorba 我错了,删除了我的答案,我以为你可以利用主机文件并将域欺骗到本地主机..
【解决方案2】:

更简单的解决方案是:

因为来自create-react-app 的服务器仅在development 期间使用,所以您可以在每个浏览器 上使用额外的扩展 来解决问题。以下是一些扩展,您可以在 development 阶段使用它们来解决 CORS 问题:

白名单功能可用于仅在指定网站中激活扩展程序。所以不用担心安全问题。

当然,在production 阶段,您可以在各自的服务器上解决CORS问题,所以在这个阶段,浏览器扩展 不再需要。

【讨论】:

  • 既然您为所有网站禁用了 CORS,那么使用这些扩展程序不会被视为不安全吗?
  • @ReturnOfTheMac 有一个白名单功能可供您使用,因此该扩展程序仅在列出的某些站点上运行。
  • 它说,** 当您的浏览器中允许使用 CORS 时,对于以下域,CORS 被禁用。 ** 表示只有列出的域会被阻止。
猜你喜欢
  • 2019-06-17
  • 1970-01-01
  • 2020-10-08
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
相关资源
最近更新 更多