【问题标题】:Node express cors and routes节点快递 cors 和路线
【发布时间】: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 请求。

标签: node.js rest express cors


【解决方案1】:

我的想法是使用 if 来过滤 app.post 中的请求 例如,

app.post('/products/:id', cors(corsOptions), function (req, res, next) {
        if(req.header[origin]===whitelisted){
        writeToDatabase();
        res.json({ msg: 'This is CORS-enabled for a whitelisted domain.' }); }           
    });

【讨论】:

  • 是的,这是一种code smell 解决方案,必须为每个受保护的路由重复。
猜你喜欢
  • 2016-12-18
  • 2018-03-19
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多