获取“被 CORS 策略阻止:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。”使用 Axios 使用 MERN 堆栈

Posted

技术标签:

【中文标题】获取“被 CORS 策略阻止:请求的资源上不存在 \'Access-Control-Allow-Origin\' 标头。”使用 Axios 使用 MERN 堆栈【英文标题】:Getting "blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource." with MERN stack using Axios获取“被 CORS 策略阻止:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。”使用 Axios 使用 MERN 堆栈 【发布时间】:2021-02-18 12:20:09 【问题描述】:

我有一个 MERN 堆栈设置,我的 React 前端在一个服务器实例上,我的后端 Node-Express API 在另一个服务器实例上。在开发中我没有问题,但如果我尝试在生产中上传超过 1MB 的文件,我会收到 CORS 错误。如果它低于 1MB,它就可以上传。

Node-Express 中间件:

app.use(function(req, res, next) 
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
  ); // I have tried without this as well.

  app.use(fileUpload(
    createParentPath: true,
    limits:  
      fileSize: 64 * 1024 * 1024 * 1024 // 64MB max file(s) size
    ,
  )) / I have tried without the limits, too.

  app.use(cors()); // I have tried even by including the origin parameter

反应

 axios.post(`$apiEndpoint/upload`, data,  
      headers:  "x-auth-token":token  
    )
      .then((response) => console.log(response.data));

【问题讨论】:

能否包含整个代码? 会有帮助吗?我将 create-react-app 用于开发中的 React 和两个单独的 docker 容器(一个用于 mongodb,一个用于节点 API 实例)。它在开发中运行良好,但在生产中却不行。 根据我的经验,当出现服务器错误时,它的响应与成功时不同,其中包括标头。这就是为什么在客户端您会看到 CORS 错误。我建议检查您的服务器日志并确定当您发送大于 1MB 的文件时会发生什么。 @poeticGeek ????我不知道为什么我不打算这样做。只是一个菜鸟的错误。设置代理时,我假设 nginx 已从其默认设置更改。原来默认的最大文件上传大小已经到位。我提高了它,它就像一个魅力。谢谢! 【参考方案1】:

感谢 cmets 中很棒的人,有人指出我应该检查日志。出于某种原因,就像一个菜鸟一样,我没想过要这样做。一旦我这样做了,我发现 nginx 没有配置为更大的文件上传大小。我将它设置为 100Mb,它就像一个魅力。

【讨论】:

以上是关于获取“被 CORS 策略阻止:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。”使用 Axios 使用 MERN 堆栈的主要内容,如果未能解决你的问题,请参考以下文章

无法在我的快递应用中解决 CORS 政策

js如何获取某一个元素,如果获取不到就继续获取,直到获取到后停止获取?

iOS ---------- 获取设备的各种信息

java反射获取属性值

Shell 获取路径

iOS 获取文件大小