使用CORS仍然给出交叉原点错误

时间:2015-12-15 16:31:27

标签: javascript angularjs ajax node.js cors

我尝试使用cors模块通过角度$http访问节点路由。我试过一个简单的

app.use(cors());

但仍然收到错误。我尝试过添加the cors documentation a whitelist of URLs

var corsOptions = {
  origin: function(origin, callback){
    var originIsWhitelisted = whitelist.indexOf(origin) !== -1;
    callback(null, originIsWhitelisted);
  }
};

app.get('/someroute/:someparam/', cors(corsOptions), function(req, res, next){
  mymodule.getData(req.params.someparam, function(err, data){
      if (err){
        console.log('error with route', err);
      }else{
        res.json({result: data});
      }
  });
});

但我仍然收到错误

  

XMLHttpRequest无法加载localhost:8888 / someroute / undefined。交叉源请求仅支持协议方案:http,数据,chrome,chrome-extension,https,chrome-extension-resource。

我认为使用cors模块是为了避免这个问题。我怎么解决?

1 个答案:

答案 0 :(得分:3)

这里的问题是您的客户需要提出URL

的请求
http://localhost:8888/someroute/undefined

相反,您的客户正在提出

请求
localhost:8888/someroute/undefined

浏览器使用方案8888将其解释为对主机localhost的请求。但是,localhost并不是Chrome支持CORS的方案;仅限httphttpsdata等内容。

某处,您的客户端代码执行类似

的操作
xhr.send("localhost:8888/...")

但它需要一个领先的方案,例如http://https://

请注意,如果您尝试使用fileabout方案请求资源,则会收到类似错误。