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

我正在研究一个平均应用程序。使用节点的Mean-Cli packgae。 其中我使用darksky天气API,在包名信息。 我有意思的应用程序的自定义文件夹中的其他4个包。 我如何启用CORS,以便所有API请求都不会失败并返回响应。

我GOOGLE了,发现我必须添加这个中间件。

//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(); } 

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

我试图添加这个中间件的服务器路由文件? 信息包和confile中的express.js文件却没有起作用。

所以你的问题的实际解决scheme原来是使用jsonpcallback与forecast.io api,因为他们没有启用客户端访问的CORS头。 像这样使用$http.jsonp

 $http.jsonp(url + lat + ',' + lng + '?callback=JSON_CALLBACK'); 

通常要在expressjs服务器上启用CORS,请执行以下操作。

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

cors模块会自动在响应中添加所有aors相关的头文件。 或者你也可以configuration很多选项。 检查官方文档

要么

如果你想自己做,你可以做以下事情

 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(); } }; 

然后启用您的CORS中间件

 app.use(permitCrossDomainRequests); 

最后启用路由

 app.use(app.router); 

如果您只有一台Express服务器,则只需添加一次中间件。 您的其他模块可能作为中间件提供给服务器。

如果你注册了一个没有任何限定path的中间件函数,比如app.use(function(){ ... }) ,中间件将会运行服务器处理的每个请求。 任何给定请求调用的其他中间件都无关紧要。

如果您有多个Express服务器同时运行(这不太可能),那么您需要将中间件添加到每个服务器。