我有很多路线的明确申请:
app.get('foo/bar', function(res, res, next) { ... });
app.post('foo/bar', function(res, res, next) { ... });
app.get('another/one/path', function(res, res, next) { ... }));
我需要向此应用程序发送跨域AJAX请求。因此,我需要在OPTIONS请求上发送正确的Access-Control-Allow-Methods。例如,如果请求是OPTIONS 'foo/bar'
,则Access-Control-Allow-Methods标头应该等于GET,POST
。
我看到如果我在Express框架中发送OPTIONS请求,我已经在响应正文中获得了正确的方法列表。例如,如果我发送OPTIONS 'foo/bar'
,我会收到身体GET,POST
的回复。现在,我想在GET,POST
标题中发送Access-Control-Allow-Methods
。我正试图找到一个简单的解决方案来做到这一点。我不想添加选项路由,因为我在应用程序中已经有超过200条路由。
答案 0 :(得分:3)
最简单的解决方案是使用cors
npm包。
var express = require('express')
, cors = require('cors')
, app = express();
app.use(cors());
答案 1 :(得分:2)
如果您想要自己动手,这将帮助您入门。
app.use(function(req, res, next) {
var oneof = false;
if (req.headers.origin) { //req.headers.origin.match(/whateverDomainYouWantToWhitelist/g) ) {
res.header('Access-Control-Allow-Origin', req.headers.origin);
oneof = true;
}
if (req.headers['access-control-request-method']) {
res.header('Access-Control-Allow-Methods', req.headers['access-control-request-method']);
oneof = true;
}
if (req.headers['access-control-request-headers']) {
res.header('Access-Control-Allow-Headers', req.headers['access-control-request-headers']);
oneof = true;
}
if (oneof) {
res.header('Access-Control-Max-Age', 60 * 60 * 24 * 365);
}
// intercept OPTIONS method
if (oneof && req.method == 'OPTIONS') {
res.sendStatus(200);
} else {
next();
}
});