我想从请求中获取客户端请求的 url。
目前我使用:
var requestedUrl = req.protocol + '://' + req.host + ':3000' + req.url;
这一点都不好。它还遗漏了我需要的 url 片段(#/something)。
有没有办法获得完整的网址?也许在标题之外?
问候
我想从请求中获取客户端请求的 url。
目前我使用:
var requestedUrl = req.protocol + '://' + req.host + ':3000' + req.url;
这一点都不好。它还遗漏了我需要的 url 片段(#/something)。
有没有办法获得完整的网址?也许在标题之外?
问候
您无法在服务器上获取 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 所说,您在 # server-side 之后无法获得任何东西,那是针对浏览器的
var requestedUrl = 'http://' + req.headers.host + ':3000' + req.url
这是你要找的吗?
req._parsedUrl.pathname
如果您还没有使用,您应该:
var util = require('util'); // core module
console.log(util.inspect(req));
调试找出那种数据。