【问题标题】:No Access-Control-Allow-Origin header is present on the requested resource node.js [duplicate]请求的资源 node.js 上不存在 Access-Control-Allow-Origin 标头 [重复]
【发布时间】:2014-04-09 10:41:00
【问题描述】:

我在尝试通过 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 开发工具检查标头。
  • 很高兴看到也发出请求的前端代码。在过去的几个小时里,我一直在与类似的问题作斗争。我在发送格式错误的 POST 数据时遇到了问题(使用 jquery)。我有两个标题,还有res.header('Access-Control-Allow-Methods', 'POST');,你可以用逗号分隔'POST, GET' 等指定多个休息方法。这可能会有所帮助

标签: jquery node.js cors


【解决方案1】:

我的猜测是您在中间件 (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() 方法中添加了标题,它可以工作,但它似乎不是正确的方法
  • 谢谢,帮我修好了!
【解决方案2】:

要解决此问题,请在 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();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 2020-07-11
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 2013-11-29
    • 2014-07-28
    相关资源
    最近更新 更多