我想从客户请求中获取请求的网址。
目前我使用:
var requestedUrl = req.protocol + '://' + req.host + ':3000' + req.url;
这根本不是很好。它还遗漏了我需要的网址片段(#/ something)。
有没有办法可以获得完整的网址?也许在标题之外?
此致
答案 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));
调试找出那种数据。