如何在MEAN STACK Web应用程序中启用CORS?

ash*_*148 5 node.js angularjs mean-stack

我正在研究MEAN-STACK应用程序.使用Mean-cli packgae of node.其中我使用的是darksky weather API,在包名称信息中.我在平均应用程序的自定义文件夹中有4个其他包.我是如何启用CORS以便所有API请求都不会失败并返回响应的.

我用谷歌搜索,发现我必须添加这个中间件.

 //CORS middleware
var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', 'example.com');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type');
    next();
}
Run Code Online (Sandbox Code Playgroud)

我应该在哪里添加这个.在我们使用跨源请求的每个包中或在某个全局文件中.

我试过在服务器-route文件中添加这个中间件?信息包和confile的express.js文件但它没有用.

kac*_*mbu 2

因此,您的问题的实际解决方案是使用jsonp带有 Forecast.io api 的回调,因为它们没有为客户端访问启用 CORS 标头。$http.jsonp像这样使用

$http.jsonp(url + lat + ',' + lng + '?callback=JSON_CALLBACK');
Run Code Online (Sandbox Code Playgroud)

一般来说,要在expressjs服务器上启用CORS,请执行以下操作。

  1. 安装Express 的cors模块npm install cors
  2. 需要它var cors = require('cors');
  3. 将其设置在您的 Express 应用程序实例上app.use(cors());

cors模块将自动在响应中添加所有与 aor 相关的标头。或者,您也可以配置很多选项。查看官方文档

或者

如果您想自己做,您可以执行以下操作

var permitCrossDomainRequests = function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type');
// some browsers send a pre-flight OPTIONS request to check if CORS is enabled so you have to also respond to that
if ('OPTIONS' === req.method) {
  res.send(200);
}
else {
  next();
}
};
Run Code Online (Sandbox Code Playgroud)

然后启用你的 CORS 中间件

app.use(permitCrossDomainRequests);
Run Code Online (Sandbox Code Playgroud)

最后启用路由

app.use(app.router);
Run Code Online (Sandbox Code Playgroud)