我想从请求中获取客户端请求的URL。
目前我使用:
var requestedUrl = req.protocol + '://' + req.host + ':3000' + req.url;
这真的不太好。它还会忽略我所需要的URL片段(#/something)。
有没有办法可以获取完整的URL?也许可以从头部获取?
谢谢。
我想从请求中获取客户端请求的URL。
目前我使用:
var requestedUrl = req.protocol + '://' + req.host + ':3000' + req.url;
这真的不太好。它还会忽略我所需要的URL片段(#/something)。
有没有办法可以获取完整的URL?也许可以从头部获取?
谢谢。
在服务器端无法获取URL的片段(哈希部分),因为浏览器不会传输它。
片段标识符与URI的其余部分的处理方式不同: 它的处理完全由客户端完成,服务器没有参与 - 当然,服务器通常帮助确定MIME类型,而MIME类型决定片段的处理。当代理程序(如Web浏览器)从Web服务器请求资源时,代理程序发送URI到服务器,但不发送片段。相反,代理程序等待服务器发送资源,然后根据文档类型和片段值处理资源。
如果您想获取完整的URL(不包括片段标识符),最好的方法是使用“Host”标头,该标头包括端口,而不是像您当前所做的那样使用req.host:
var requestedUrl = req.protocol + '://' + req.get('Host') + req.url;
我经常在我的Express应用程序中添加类似以下的内容:
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));
调试时找出那种数据。