如何在Express中获得完整的网址?
假设我的示例网址是
http://example.com/one/two
我说我有以下路线
app.get('/one/two', function (req, res) {
var url = req.url;
}
url
的值将是/one/two
url
。
如何在Express中获得完整的网址 ? 例如,在上述情况下,我希望收到http://example.com/one/two
。
该协议可用作req.protocol
。 docs在这里
req.get('X-Forwarded-Protocol')
已设置并且值为https
,否则您可以假设为http
req.get('X-Forwarded-Protocol')
,在这种情况下,您知道这是您的协议 Gopal指出,主机来自req.get('host')
希望你的URL不需要非标准的端口,但是如果你确实需要了解它,你就会在你的应用程序状态中拥有它,因为它是你在服务器启动时传给app.listen
的任何东西。 但是,在非标准端口上进行本地开发的情况下,Chrome似乎将端口包含在主机头中,例如, req.get('host')
返回localhost:3000
。 因此,至少对于标准端口上的生产站点并直接浏览到您的快速应用程序(无需反向代理)的情况, host
标头似乎对URL中的端口做了正确的事情。
路径来自req.originalUrl
(谢谢@pgrassant)。 注意这个DOES包含查询字符串。 关于req.url和req.originalUrl的文档。 取决于您打算如何处理URL,与req.url
相比, originalUrl
可能是也可能不是正确的值。
将所有这些组合在一起以重建绝对URL。
var fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
您可以使用node.js API作为URL并将URL.format()
的信息传递给URL.format()
,而不是将它们连接在一起。
例:
var url = require('url');
function fullUrl(req) {
return url.format({
protocol: req.protocol,
host: req.get('host'),
pathname: req.originalUrl
});
}
我发现它有点PITA来获取请求的网址。 我无法相信在快递中没有更简单的方法。 应该只是req.requested_url
但这是我如何设置它:
var port = req.app.settings.port || cfg.port;
res.locals.requested_url = req.protocol + '://' + req.host + ( port == 80 || po
rt == 443 ? '' : ':'+port ) + req.path;
链接地址: http://www.djcxy.com/p/70131.html