Expressjs

时间:2017-05-30 09:44:36

标签: node.js express cors

我已经在我的nodejs应用程序中配置了cors,如下所示:

cors = require('cors');

var whitelist = ['http://first.url', 'https://test.cloudfront.net']
var corsOptions = {
    origin: function (origin, callback) {
        if (whitelist.indexOf(origin) !== -1) {
            callback(null, true)
        } else {
            callback(new Error('Not allowed by CORS'))
        }
    }
}

router.get('/home', cors(corsOptions), controller.index);

它正在运行并从http://first.url的nodejs应用程序中获取数据,但是当我使用https://test.cloudfront.net进行测试时,它无法正常工作并返回以下错误。

  

XMLHttpRequest无法加载https://server.cloudfront.net/api/app/home。   请求中不存在“Access-Control-Allow-Origin”标头   资源。原因'https://test.cloudfront.net'因此不是   允许访问。

请让我知道该错误是如何返回的。由于cloudfront中缺少某些配置?

1 个答案:

答案 0 :(得分:0)

浏览器在向服务器发出OPTIONS请求之前发送它是否接受跨源请求,只需使用简单的中间件处理OPTIONS请求

app.use(function(req,res, next){
   if(req.method == "OPTIONS"){
      res.header('Access-Control-Allow-Headers', "*");
      res.header('Access-Control-Allow-Methods', "POST, GET, OPTIONS, PUT, PATCH, DELETE");
      res.header('Access-Control-Allow-Origin', "*");
      res.header('Access-Control-Allow-Credentials', true);
      return res.sendStatus(200);
    }
    else
      return next();
});