如何使用 Node 服务器处理预检 CORS 请求?

Posted

技术标签:

【中文标题】如何使用 Node 服务器处理预检 CORS 请求?【英文标题】:How to handle preflight CORS request using Node server? 【发布时间】:2018-11-12 19:17:17 【问题描述】:

我已经在我的节点服务器中配置了 COR,如下所示。

var originsWhitelist = [
  'http://localhost:4200'     //this is my front-end url for development

];
var corsOptions = 
  origin: function(origin, callback)
        console.log(origin);
        var isWhitelisted = originsWhitelist.indexOf(origin) !== -1;
        console.log(isWhitelisted);
        callback(null, isWhitelisted);
  ,
  credentials:true


app.use(cors(corsOptions))

我正在从 Angular 前端发送 json 数据,但在此期间我收到这样的错误, 选项http://localhost:30000/api/addProfile 0 ()

我的请求标头是,

Provisional headers are shown
Access-Control-Request-Headers: content-type
Access-Control-Request-Method: POST
Origin: http://localhost:4200
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/66.0.3359.181 Safari/537.36

所以,我有其他发布请求,我在其中发送多部分/从数据,但是当这个请求发送错误并且响应是未知错误时它工作正常。

【问题讨论】:

【参考方案1】:

应该这样做:

app.options('*', cors(corsOptions));

您应该阅读文档:https://github.com/expressjs/cors#enabling-cors-pre-flight

这个问题对我来说也很奇怪,因为浏览器不应该为 POST 请求触发预检。也许我错过了关于 CORS 的一些东西。

【讨论】:

是的,实际上这是我的错误。上述错误是因为我将请求发送到其他端口而不是 3000。

以上是关于如何使用 Node 服务器处理预检 CORS 请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 的预检 CORS POST 请求中处理 CSRF?

Laravel/React:barryvdh/laravel-cors 处理预检 HTTP OPTIONS 请求

在 node/express 中启用了 CORS,但得到“对预检请求的响应未通过访问控制检查”

带有预检的 Node.JS 中的跨域 POST 请求?

如何使用 AWS API Gateway 为 CORS 预检请求设置配额

如何配置嵌入式 Jetty 以处理 OPTIONS 预检请求?