如何在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在这里

  • 在Express 3.0之前,除非您看到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

    上一篇: How to get the full url in Express?

    下一篇: Magically bridge a device to my network via my phone?