如何在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;
