Express CORS域名白名单

时间:2016-04-04 01:16:53

标签: node.js rest express cors

我正在使用此模块处理cors请求https://www.npmjs.com/package/cors 我需要限制除白名单之外的所有域

从官方CORS模块示例:

var whitelist = ['http://example1.com', 'http://example2.com'];
var corsOptions = {
  origin: function(origin, callback){
    var originIsWhitelisted = whitelist.indexOf(origin) !== -1;
    callback(null, originIsWhitelisted);
  }
};

app.get('/products/:id', cors(corsOptions), function(req, res, next){
  res.json({msg: 'This is CORS-enabled for a whitelisted domain.'});
});

我已将其更改为使其正常工作:

var origin;
var corsOptions;
app.all('*', function (req, res, next) {
    origin = req.get('origin');
    var whitelist = ['http://example1.com', 'http://example2.com'];
    corsOptions = {
        origin: function (origin, callback) {
            var originIsWhitelisted = whitelist.indexOf(origin) !== -1;
            callback(null, originIsWhitelisted);
        }
    };
    next();
});
app.post('/products/:id', cors(corsOptions), function (req, res, next) {
    res.json({ msg: 'This is CORS-enabled for a whitelisted domain.' });
});

然后我通过发布到http://localhost:8080app.post('/products/:id'...)运行测试我预计不应该执行该测试,因为http://localhost:8080未列入白名单但实际上已经列入白名单。知道为什么以及如何解决这个问题?

我也加了cors(corsOptions)观看,但它说 - not available

1 个答案:

答案 0 :(得分:2)

原因是corsOptions在调用undefined时仍然是cors(corsOptions)(实际上与cors()相同),因为在启动期间会立即评估cors(corsOptions)