16

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

目前我使用:

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

这一点都不好。它还遗漏了我需要的 url 片段(#/something)。

有没有办法获得完整的网址?也许在标题之外?

问候

4

4 回答 4

22

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

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

来自维基百科上的片段标识符

如果您想获取完整的 URL(没有片段标识符),最好的方法是使用包含端口而不是 req.host 的“主机”标头,但与您当前所做的相同:

var requestedUrl = req.protocol + '://' + req.get('Host') + req.url;
于 2012-08-18T11:32:52.660 回答
3

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

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

现在你有了一个可以按需调用的函数。

于 2014-03-06T23:04:40.150 回答
1

恐怕你能做的就这么多了。除非您使用 https,否则您可以将协议假定为 http。正如 Raoul 所说,您在 # server-side 之后无法获得任何东西,那是针对浏览器的

   var requestedUrl =  'http://' + req.headers.host + ':3000'  + req.url
于 2012-08-18T10:38:42.027 回答
0

这是你要找的吗?

req._parsedUrl.pathname

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

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

调试找出那种数据。

于 2012-08-18T08:28:15.500 回答