如何在 MEAN STACK 网络应用程序中启用 CORS?
How to enable CORS in MEAN STACK web app?
我正在研究 MEAN-STACK application.Using 节点的 Mean-cli packgae。
我在其中使用暗天天气 API,
包名中的信息。我在 Mean 应用程序的自定义文件夹中还有 4 个其他包。
我如何启用 CORS 以便所有 API 请求不会失败并且 return 响应。
我用谷歌搜索发现我必须添加这个中间件。
//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();
}
我应该在哪里添加这个。在我们使用跨域请求的每个包中或在某些全局文件中。
我试过在服务器路由文件中添加这个中间件?信息包和配置文件的 express.js 文件中,但它没有工作。
如果你只有一台Express服务器,你只需要添加一次中间件。您的其他模块可能作为中间件提供给服务器。
如果你注册一个没有任何限定路径的中间件函数,比如app.use(function(){ ... })
,中间件将运行为服务器处理的每个请求。任何给定请求调用什么其他中间件并不重要。
如果您有多个 Express 服务器 运行 同时连接(这不太可能),那么您需要将中间件添加到每个服务器。
因此,您的问题的实际解决方案是使用 jsonp
回调和 forecast.io api,因为他们没有为客户端访问启用 CORS headers。像这样使用 $http.jsonp
$http.jsonp(url + lat + ',' + lng + '?callback=JSON_CALLBACK');
通常要在您的 expressjs 服务器上启用 CORS,请执行以下操作。
- 使用
npm install cors
为 express 安装 cors 模块
- 需要它
var cors = require('cors');
- 使用
app.use(cors());
在您的 Express 应用程序实例上设置它
cors
模块会自动在响应中添加所有与 headers 相关的 aors。或者,您也可以配置很多选项。检查 official docs
或
如果您想自己做,可以执行以下操作
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);
我正在研究 MEAN-STACK application.Using 节点的 Mean-cli packgae。 我在其中使用暗天天气 API, 包名中的信息。我在 Mean 应用程序的自定义文件夹中还有 4 个其他包。 我如何启用 CORS 以便所有 API 请求不会失败并且 return 响应。
我用谷歌搜索发现我必须添加这个中间件。
//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();
}
我应该在哪里添加这个。在我们使用跨域请求的每个包中或在某些全局文件中。
我试过在服务器路由文件中添加这个中间件?信息包和配置文件的 express.js 文件中,但它没有工作。
如果你只有一台Express服务器,你只需要添加一次中间件。您的其他模块可能作为中间件提供给服务器。
如果你注册一个没有任何限定路径的中间件函数,比如app.use(function(){ ... })
,中间件将运行为服务器处理的每个请求。任何给定请求调用什么其他中间件并不重要。
如果您有多个 Express 服务器 运行 同时连接(这不太可能),那么您需要将中间件添加到每个服务器。
因此,您的问题的实际解决方案是使用 jsonp
回调和 forecast.io api,因为他们没有为客户端访问启用 CORS headers。像这样使用 $http.jsonp
$http.jsonp(url + lat + ',' + lng + '?callback=JSON_CALLBACK');
通常要在您的 expressjs 服务器上启用 CORS,请执行以下操作。
- 使用
npm install cors
为 express 安装 cors 模块
- 需要它
var cors = require('cors');
- 使用
app.use(cors());
在您的 Express 应用程序实例上设置它
cors
模块会自动在响应中添加所有与 headers 相关的 aors。或者,您也可以配置很多选项。检查 official docs
或
如果您想自己做,可以执行以下操作
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);