Node Express cors和routes

2ekbmq32  于 2023-10-17  发布在  Node.js
关注(0)|答案(2)|浏览(106)

我正在使用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域的情况下,我不需要向数据库中写入任何内容。
有什么想法吗?

rdrgkggo

rdrgkggo1#

我的想法是使用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.' }); }           
    });
qvk1mo1f

qvk1mo1f2#

尝试在corsOptions中抛出一个错误,如下面的answer所示。基本上,当originIsWhitelisted为false时抛出错误。这应该可以解决问题。

var customCorsOptions = {
  origin: function (origin, callback) {
    const allowedOrigins = process.env.ALLOWED_ORIGINS.split(" ");
    var originIsWhitelisted = allowedOrigins.indexOf(origin) !== -1;
    if (originIsWhitelisted) {
      callback(null, originIsWhitelisted);
    } else {
      callback(new Error("UNAUTHORIZED"));
    }
  },
};

相关问题