一尘不染

如何在Express中获取完整的URL?

node.js

假设我的示例网址是

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


阅读 745

收藏
2020-07-07

共1个答案

一尘不染

  1. 该协议可从下载req.protocol这里的文档

    1. 在express 3.0之前,http除非您看到req.get('X-Forwarded-Protocol')已设置并具有value 的协议,否则可以假定为该协议https,在这种情况下,您知道这是您的协议
    2. 主机来自req.get('host')Gopal指示
  2. 希望您的URL中不需要非标准端口,但是如果您确实需要知道它,则可以在应用程序状态下使用它,因为它是app.listen在服务器启动时传递给您的。但是,在使用非标准端口进行本地开发的情况下,Chrome似乎将端口包含在主机标头中,因此例如req.get('host')返回localhost:3000。因此,至少对于在标准端口上的生产站点并直接浏览到快速应用程序(没有反向代理)的情况,host标头似乎对URL中的端口做了正确的处理。

  3. 路径来自req.originalUrl(感谢@pgrassant)。请注意,此DOES包含查询字符串。此处的文档位于req.url和req.originalUrl。根据您打算对URL originalUrl进行的处理,与相比,该值可能是正确的值,也可能不是正确的值req.url

将所有内容组合在一起以重建绝对URL。

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