反应.js |如何摆脱 Codesandbox 中的跨域错误

Posted

技术标签:

【中文标题】反应.js |如何摆脱 Codesandbox 中的跨域错误【英文标题】:react.js | how to get rid of cross-origin error in Codesandbox 【发布时间】:2018-09-04 16:55:31 【问题描述】:

IN FIREFOX: 当我执行我的代码时,我应该得到的典型错误是:“TypeError: Cannot read property 'setState' of undefined”,相反我收到了一个非常奇怪的跨域错误。

这是错误的屏幕截图: http://prntscr.com/iwipnb

错误 引发了跨域错误。 React 无权访问 开发中的实际错误对象。请参阅https://reactjs.org/docs/cross-origin-errors.html 了解更多信息。

这是我的代码:https://codesandbox.io/s/4885l37xrw

如何避免Codesandbox in FIREFOX出现跨域错误?

EDIT1:我知道什么是代码错误(bind(this))。我正在寻找 跨域错误 firefox 问题。谢谢

【问题讨论】:

我像往常一样遇到错误。 joxi.ru/L21dx5Xc65Wv8m @lito 您是否尝试使用 create-react-app 运行此代码?当您这样做时,您是否验证了 FF 59.0.1 上的 CORS 问题消失了?如果是这样,我认为这可以归结为codeandbox.io中的一个错误。 【参考方案1】:

我的服务器设置支持 CORS,但它仍然给我这个错误。

如果在处理来自服务器的响应时出现错误,ReactJS 似乎存在问题。就我而言,它是在尝试将无效响应解析为 JSON 时发生的。

【讨论】:

【参考方案2】:

您的问题中提到的跨源错误是 Codesandbox 的 github 存储库中的 open issue(截至 2019 年 12 月)。

Reactjs 网站在Cross-origin Errors 下对此进行了解释

不要与Cross Origin Resource Sharing混淆

【讨论】:

【参考方案3】:

在 API 文件构造函数中添加这个

public function __construct($config = 'rest')
   header('Access-Control-Allow-Origin: *');
   header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
   header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
      parent::__construct();
    

【讨论】:

【参考方案4】:

您可以使用 corsproxy 从本地计算机访问 localhost API。

    首先需要安装 corsproxy npm 包。 npm install -g corsproxy

    在终端上运行 corsproxy 命令

    它将在http://localhost:1337 上运行 现在您需要做的是在您的 api 调用中附加上述 URL。假设您需要点击 localhost:3000/customer 才能点击 api。

所以新的网址将是http://localhost:1337/localhost:3000/customer

这将消除 CORS 错误。

在 cmets 中对您的查询进行 cmets。

【讨论】:

【参考方案5】:

您似乎需要在服务的 S3 存储桶上启用 CORS:https://s3-eu-west-1.amazonaws.com/codesandbox-downtime/downtime.json

为此,只需导航到您的存储桶,然后单击“权限”选项卡,然后在 CORS 框中输入具有所需权限的 XML 文档。允许任何主机发出 GET 请求的示例权限:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>http://*</AllowedOrigin>
    <AllowedOrigin>https://*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
</CORSRule>
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>

【讨论】:

嗨!谢谢。我想我没有很好地解释自己。我知道代码方面的解决方案。我想知道解决方法以避免 FIREFOX 中 Codesandbox 中的跨域错误。 我不确定你的意思。更新后的代码在 Firefox 59.0.1 中运行良好,没有跨域错误。你的FF版本是多少? 我也有 FF 59.0.1。你认为这是 FF 中的配置吗? 我的预感是,这是由于在错误触发时,codesandbox.io 对资源提出的请求。我正在检查更深入的... @lito 这是代码沙盒上的一个错误。将create-react-app 与您的两个组件一起使用,您会看到没有抛出 CORS 错误。

以上是关于反应.js |如何摆脱 Codesandbox 中的跨域错误的主要内容,如果未能解决你的问题,请参考以下文章

如何获得有关反应中下拉值变化的数据?

CodeSandbox — 如何修复 tsserver.js 错误?

如何在反应材料表的列中添加自定义复选框?

覆盖 MuiContainer 类时如何摆脱 Typescript 类型错误?

反应损失输入焦点与许多输入

如何在 CodeSandBox 中运行脚本?