【发布时间】:2016-07-23 11:33:49
【问题描述】:
我正在使用 CORS https://www.npmjs.com/package/cors 来允许 whitedomain 列表。
var whitelist = ['http://example1.com', 'http://example2.com'];
var corsOptions = {
origin: function(origin, callback){
var originIsWhitelisted = whitelist.indexOf(origin) !== -1;
callback(null, originIsWhitelisted);
}
};
app.post('/products/:id', cors(corsOptions), function (req, res, next) {
console.log(0);
res.json({ msg: 'This is CORS-enabled for a whitelisted domain.' });
});
如果是non whitedomain,服务器会返回No 'Access-Control-Allow-Origin',这很好,但同时我可以在调试中看到res.json({ msg: 'This is CORS-enabled for a whitelisted domain.' }); 和console.log(0); 行仍然被执行-console.log(0); 打印在0服务器端的控制台,在这种情况下我不希望这样做。
所以让我们说如果是扭动到数据库:
app.post('/products/:id', cors(corsOptions), function (req, res, next) {
writeToDatabase();
res.json({ msg: 'This is CORS-enabled for a whitelisted domain.' });
});
这样writeToDatabase(); 将始终被执行。但我想避免这种情况,因为在 non whitelisted 域的情况下,我不需要将任何内容写入数据库。
有什么想法吗?
【问题讨论】:
-
您可以通过添加自定义请求标头引用here 来制作HTTP 请求预检。这样,如果不允许来源,则以下 route 将不会首先执行。因为它第一次发送 OPTIONS 请求来验证 CORS,然后发送 POST 请求。