在Express中获取请求来源

5
我该如何获取源代码?当我在router.get('/', ...)下使用以下代码时,它只会返回undefined。
var origin = req.get('origin');

我正在尝试使用原始域名作为查找键,然后构造正确的URL参数以向API发送POST请求。

发送请求时,您是否在请求头中设置了“origin”?我猜您可能想使用“req.hostname”。 - Nivesh
2
你想将API暴露给特定的域名访问吗? - Nivesh
req.host 返回 Express 运行的域名,在我的测试中;我正在尝试允许 CORS,以便允许调用 .ajax 的域名访问托管 Express 的域名,并且还是查找中的哈希键。 - sqldoug
我在我的app.js中设置了以下内容:app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header('Access-Control-Allow-Methods', 'GET, POST'); next(); }); - sqldoug
一旦您将客户端代码部署到服务器上,您将会收到 req.get(origin) 数据。 - Nivesh
3个回答

5
将这个expressJs中间件添加到请求路径中。确保它是请求遇到的第一个中间件。
/**
 * Creates origin property on request object
 */
app.use(function (req, _res, next) {
  var protocol = req.protocol;

  var hostHeaderIndex = req.rawHeaders.indexOf('Host') + 1;
  var host = hostHeaderIndex ? req.rawHeaders[hostHeaderIndex] : undefined;

  Object.defineProperty(req, 'origin', {
    get: function () {
      if (!host) {
        return req.headers.referer ? req.headers.referer.substring(0, req.headers.referer.length - 1) : undefined;
      }
      else {
        return protocol + '://' + host;
      }
    }
  });

  next();
});

其中app是指express应用程序或express路由器对象。


3

获取主机/源的方法有两种

第一种方法:

您必须从HOST header中检索它。

var host = req.get('host');

如果这是为了支持跨域请求,你应该使用Origin头部。
var origin = req.get('origin');

第二种方法:
您也可以使用:
var host = req.headers.host;
var origin = req.headers.origin;

额外说明:

如果您正在寻找客户端的IP地址,可以使用以下代码检索:

var userIP = req.socket.remoteAddress;

2
在服务器(例如app.js)的路由之前插入res.header("Access-Control-Allow-Origin", <允许访问的单个域名或者'*'表示任何域名>);,则var origin = req.get('Origin')可以在router.get下正常工作。

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