提问者:小点点

如何获取Express中的完整url?


假设我的示例url是

http://example.com/one/two

我说我有以下路线

app.get('/one/two', function (req, res) {
    var url = req.url;
}

URL的值将为/One/Two

如何获取Express中的完整url?例如,在上面的情况下,我希望收到http://example.com/one/two


共2个答案

匿名用户

>

  • 协议可作为req.protocol使用。这里有文件

    1. 在express 3.0之前,您可以假定协议为HTTP,除非您看到req.get('X-forwarded-protocol')已设置并具有HTTPS,在这种情况下,您知道这是您的协议

    正如Gopal所指出的,主机来自req.get('host')

    希望您的URL中不需要非标准端口,但是如果您确实需要知道它,那么您可以在应用程序状态中使用它,因为它是您在服务器启动时传递给app.listen的任何端口。但是,对于在非标准端口上进行本地开发的情况,Chrome似乎将端口包含在主机头中,因此req.get('host')返回localhost:3000。因此,至少对于标准端口上的生产站点和直接浏览express应用程序的情况(没有反向代理),host头似乎对URL中的端口做了正确的操作。

    路径来自req.originalurl(thanks@pgrassant)。注这确实包括查询字符串。在req.url和req.originalurl上的文档。与req.URL相比,originalurl可能是正确的值,也可能不是正确的值,这取决于您打算对URL执行的操作。

    将所有这些组合在一起重建绝对URL。

      var fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
    

  • 匿名用户

    您可以使用URL的node.js API并从Express传递url.format()信息,而不是单独将这些东西连接在一起。

    示例:

    var url = require('url');
    
    function fullUrl(req) {
      return url.format({
        protocol: req.protocol,
        host: req.get('host'),
        pathname: req.originalUrl
      });
    }