【问题标题】:cross domain CORS support for express.js appexpress.js 应用的跨域 CORS 支持
【发布时间】:2012-12-24 14:00:35
【问题描述】:

我有一个带有跨域设置的 express.js 应用程序

var allowedHost = {
  'http://localhost:3001': true,
  'http://localhost:7357': true
};

var allowCrossDomain = function(req, res, next) {
  if(allowedHost[req.headers.origin]) {
    res.header('Access-Control-Allow-Credentials', true);
    res.header('Access-Control-Allow-Origin', req.headers.origin)
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version');
    next();
  } else {
    res.send(403, {auth: false});
  }
}

我的客户端 (backbone.js) 也被配置为接受跨域,这部分一切正常..

现在,在我的 express.js 应用程序中(在端口 3001 上运行),我正在尝试访问这样的简单页面:

app.get('/app', function(req, res, next){
  return res.render("" + __dirname + "/views/app", {
    title: 'hello world'
  });
});

如果我调用 url localhost:3001/app 例如我有 403 错误,因为 req.headers.origin 未定义,你知道吗?

我应该如何告诉我正常的 express.js 路由来应对跨域检查?

非常感谢您对此问题的任何帮助;-)

【问题讨论】:

  • 不就是区分大小写的问题吗?这是Origin,而不是origin。此外,您应该使用req.get('origin')(不区分大小写)而不是req.headers.origin。现在让我们看看它是否有效。
  • 您好,很抱歉我的回复延迟...我刚刚测试了您的建议,但问题仍然存在,当我登录 req.heqders 时,我没有提到任何来源,我怎么能强制 req.headers.Origin 中的值?我想我必须在 res 对象中添加一条记录?
  • 阅读我的回答 here 关于相同的内容。
  • 阅读我的回答 here 关于相同。它对我有用。

标签: node.js express cors


【解决方案1】:

您应该使用 response.set 方法设置标头,使用 request.get 方法检索标头。

一个关于 CORS 的例子!!!

https://github.com/visionmedia/express/blob/master/examples/cors/index.js

【讨论】:

猜你喜欢
  • 2012-12-20
  • 2012-01-16
相关资源
最近更新 更多