猿问

Express.js CORS 配置,PUT 不起作用?

我在后端有一个 React 应用程序和 Nodejs(Express)。部署到主机服务器后,我为更新某些文档所做的功能无法正常工作。它给出了CORS错误:

我有这行代码来处理 server.js 中的 CORS 策略:


app.use((req, res, next) => {

  res.set({"Access-Control-Allow-Origin" : "*", 

           "Access-Control-Allow-Methods" : "HEAD, OPTIONS, GET, POST, PUT, PATCH, DELETE", 

           "Access-Control-Allow-Headers" : "Content-Type, Authorization, X-Requested-With"})

  next();

});

GET 和 POST 方法都可以,但对 PUT 不起作用(不知道 Delete 是否有效没有尝试过)


我在这个问题上花了很多时间;试过这个:https ://stackoverflow.com/a/42463858/11896129


在网上找了一堆解决方案,尝试从 IIS web.config 文件配置它,没有解决我的问题。我可能会错过哪个部分?


泛舟湖上清波郎朗
浏览 155回答 3
3回答

慕雪6442864

如MDN 所述:此外,对于可能对服务器数据造成副作用的 HTTP 请求方法(特别是对于GET 以外的 HTTP 方法,或者对于某些 MIME 类型的 POST 使用),规范要求浏览器“预检”请求,请求支持的方法使用 HTTP OPTIONS 请求方法从服务器发送,然后,在服务器“批准”后,使用实际 HTTP 请求方法发送实际请求。所以你必须回答预检请求:  app.options("*", (req, res) => {     res.status(200).send("Preflight request allowed");   });在此处阅读有关预检请求的更多信息。

幕布斯7119047

您看到的错误很可能No 'Access-Control-Allow-Origin' header is present来自预检 OPTIONS 请求,该请求很可能甚至没有到达您的快速后端,而是由前端的网络服务器处理。要么安排 OPTIONS 请求也被中继到您的 web 服务器配置中的 express 后端,要么指示 web 服务器使用所需的标头对其进行响应。检查这些:https://support.plesk.com/hc/en-us/articles/115001338265-How-to-set-up-CORS-cross-origin-resource-sharing-in-Plesk-for-Linux-https://support.plesk.com/hc/en-us/articles/360005431913-Is-it-possible-to-enable-CORS-cross-origin-resource-sharing-on-Plesk-for-Windowshttps://talk.plesk.com/threads/iis-cors-configuration-problem-for-node-js-backend.355677/

眼眸繁星

这应该可行,我使用了这个 CORS 配置  app.use(function(req,res,next){    res.header("Access-Control-Allow-Origin", "*");    res.header("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, PATCH");    res.header("Access-Control-Allow-Headers", "Accept, Content-Type, Authorization, X-Requested-With");    next();  });
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答