node.js - Express CORS域名白名单

标签 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.' });
});

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

我还添加了 cors(corsOptions) 来观看,但它说 - 不可用

最佳答案

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

关于node.js - Express CORS域名白名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36393256/

相关文章:

java - 带有 @FormParam 的 PUT 方法

rest - 尝试授权用户并获取 token 时突然出现 Instagram API "SCOPE"问题 - OAuth

Angular 通用预渲染导致 301 重定向

javascript - Hubot 脚本仅在我直接向机器人发送消息时在 Slack 中有效

javascript - 如何使用 sails.js 自定义颜色记录器

javascript - HTML语音聊天宽度Phonegap和node.js

javascript - Meteor 集合从服务器更新,未在客户端上进行响应式(Reactive)排序

ruby-on-rails - API 参数 - {person : {name: 'John' }} vs {name: 'John' }

javascript - Mongoose 索引

javascript - 连接-pg-简单表达 : Failed to prune sessions: relation "session" does not exist. PostgreSQL