expressjs:获取请求的url

expressjs: get requested url

本文关键字:url 请求 获取 expressjs      更新时间:2023-09-26

我想从请求中获取客户端请求的url。

目前我使用:

var requestedUrl = req.protocol + '://' + req.host + ':3000' + req.url;

这一点都不好。它还省去了我需要的url片段(#/mething)。

有没有办法我可以得到完整的网址?也许是在标题之外?

问候

您无法在服务器上获取url的片段(哈希部分),它不会通过浏览器传输。

片段标识符的功能与URI的其他部分不同:即,它的处理完全是客户端的,没有服务器的参与——当然,服务器通常有助于确定MIME类型,MIME类型决定片段的处理。当代理(如Web浏览器)从Web服务器请求资源时,代理会将URI发送到服务器,但不会发送片段。相反,代理等待服务器发送资源,然后代理根据文档类型和片段值处理资源。

从维基百科上的片段标识符

如果你想获得完整的URL(没有分段标识符),最好的方法是使用"主机"头,它包括端口而不是req.Host,但在其他方面与你目前所做的相同:

var requestedUrl = req.protocol + '://' + req.get('Host') + req.url;

我经常在我的快递应用程序中添加这样的东西:

  app.use(function(req, res, next) {
    req.getRoot = function() {
      return req.protocol + "://" + req.get('host');
    }
    return next();
  });

现在您有了一个函数,如果需要,可以按需调用。

恐怕这几乎是你所能做的。除非您使用https,否则您可以将协议假定为http。正如Raoul所说,在#服务器端之后,你无法获得任何东西,这是针对浏览器的

   var requestedUrl =  'http://' + req.headers.host + ':3000'  + req.url

这就是你要找的吗?

req._parsedUrl.pathname

你应该,如果你还没有使用:

var util = require('util'); // core module
console.log(util.inspect(req));

要调试,请查找此类数据。