使用Eve和AngularJS解决CORS问题

时间:2016-04-29 09:13:01

标签: python angularjs node.js cors eve

我正在使用Eve和AngularJS中的API开发应用程序。 为了避免CORS问题,我创建了一个简单的NodeJS服务器来提供我的静态文件。 但是,即使在我的Python Eve API上允许所有域编写'X_DOMAINS': '*'之后(我使用Curl进行了测试并且它有效),当我想使用$http调用API时,我的浏览器出现了问题。

这是我在chrome中遇到的错误:

XMLHttpRequest cannot load http://localhost:5000/regions. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.

我甚至在我的Node应用程序中写了这个,尽管我认为它没用:

app.all('/*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type");
  res.header("Access-Control-Allow-Methods", "GET, POST","PUT");
  next();
});

到目前为止,没有任何工作,感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

使用javascript进入一些类似的问题。我可以在前夕进行一些调整,但最终还不够。 BadRequest响应由烧瓶引擎发送,而不是前夕,禁用任何javascript尝试处理错误。看起来有一个很好的烧瓶扩展CORS能很好地覆盖它:

PieEater

这就是我最终需要的一切。

答案 1 :(得分:0)

在您的回复标题中添加:

res.header("Access-Control-Allow-Origin", "http://localhost:8080");

删除以下内容:

http://localhost:8080

或者您可以尝试获取请求来源并将其添加到响应中。像这样:

var hostName = req.get('host');
res.header("Access-Control-Allow-Origin", hostName);

在某些情况下它可能会起作用,特别是如果它是GET呼叫。但如果是POST,某些浏览器会阻止它。

另一种选择是禁用浏览器上的网络安全性(虽然不是最好的办法。)您可以阅读here

同时浏览帖子here,以便您更好地了解问题。

答案 2 :(得分:0)

在以下命令中: res.header(“Access-Control-Allow-Headers”,“X-Requested-With,Content-Type”);

您设置了允许的标头,也许您发送了其他标头,例如“授权”,在这种情况下,您必须将这些标题包含在上面的命令