请求的资源缺少Access-Control-Allow-Origin头部信息 node.js

8

我在使用ajax请求与我的node.js服务器通信时遇到了问题。

我已经按照以下方式配置了我的服务器:

var allowCrossDomain = function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type,      Accept");
  next();
};

app.use(allowCrossDomain);

在进行请求时,我遇到了这个错误:

XMLHttpRequest cannot load http://10.192.122.180:8181/meters. No 'Access-Control-Allow-     Origin' header is present on the requested resource. Origin 'http://localhost:6161' is  therefore not allowed access.

当我在浏览器中输入URL时,它可以正常工作。我已经阅读了很多关于CORS和同源策略的东西,但现在我感到有些迷失。

请问有人可以帮助我吗?

谢谢。


添加 Access-Control-Allow-Origin 是正确的,但似乎你的代码没有添加它。请使用 Firebug 或 Chrome 开发工具中的网络选项卡检查头部信息。 - SilverlightFox
很好能够看到发起请求的前端代码。过去几个小时中我一直在处理类似的问题。我遇到了发送格式错误的 POST 数据的问题(使用 jquery)。我有你那里的两个头信息,以及 res.header('Access-Control-Allow-Methods', 'POST'); ,你可以通过逗号分隔的方式指定多个 REST 方法,如 'POST,GET' 等等。这可能会有所帮助。 - Lex
2个回答

1
为了解决这个问题,请在server.js中使用以下代码。
app.use(function(req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type, Authorization');
    next();
});

0

我猜测您是在中间件(allowCrossDomain)运行之前就提供了页面。

如果您正在使用Express 3,请尝试以下操作:

app.use(allowCrossDomain);
app.use(app.router);

如果你正在使用Express 4,请确保你的 `app.use(allowCrossDomain)` 调用在其余路由(`app.get`等)之前。

我已经尝试过了,但问题仍然存在。在allowCrossDomain函数和我的app.get(...)中,我有一个console.log,并且当我尝试访问页面时,控制台中只显示allowCrossDomain函数中的日志。实际上,我的朋友使用他的本地主机尝试访问我的服务器,我们在同一个网络中。编辑:我已经在每个app.get()方法中添加了头文件,它可以工作,但这似乎不是正确的方式。 - user2401221
谢谢,问题已经解决了! - Tallboy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接