expressjs:获取请求的URL

时间:2012-08-18 08:26:14

标签: javascript node.js express

我想从客户请求中获取请求的网址。

目前我使用:

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

这根本不是很好。它还遗漏了我需要的网址片段(#/ something)。

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

此致

4 个答案:

答案 0 :(得分:17)

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

  

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

来自Fragment Identifier on Wikipedia

如果你想获得完整的URL(没有fragement标识符),最好的方法是使用包含端口而不是req.host的“Host”头,但是与你当前正在做的相同:< / p>

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

答案 1 :(得分:2)

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

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

现在你有一个功能,你可以根据需要随叫随到。

答案 2 :(得分:1)

我担心你几乎可以做的一切。 除非您使用https,否则您可以将协议视为http。 正如拉乌尔所说,在服务器端之后你无法得到任何东西,那就是浏览器

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

答案 3 :(得分:0)

这是你要找的吗?

req._parsedUrl.pathname

如果您还没有使用:

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

调试找出那种数据。