我用这个模块来处理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.' });
});
然后我通过发布到app.post('/products/:id'...)
来运行http://localhost:8080
的测试,我希望它不会被执行,因为http://localhost:8080
没有被列入白名单,但实际上它确实被列入了白名单。你知道为什么以及如何解决这个问题吗?
另外,我没有添加cors(corsOptions)
观看,但它说-not available
2条答案
按热度按时间x6yk4ghg1#
原因是当
cors(corsOptions)
被调用时,corsOptions
仍然是undefined
(实际上与cors()
相同),因为cors(corsOptions)
在启动时立即被计算。3qpi33ja2#
下面是我在
nodejs expressjs
中的解决方案。1.在
.env
文件中添加允许的来源。这样就没人知道你把哪些域名列入了白名单ALLOWED_ORIGINS=https://foo.example1 https://foo.example2
1.为
customCorsOptions
创建中间件。1.使用
cors
。