假设我的示例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。


当前回答

这里有一个添加函数的好方法,你可以调用req对象来获取url

  app.use(function(req, res, next) {
    req.getUrl = function() {
      return req.protocol + "://" + req.get('host') + req.originalUrl;
    }
    return next();
  });

现在,您有了一个可以在需要时按需调用的函数。

其他回答

我试着把所有数据都记录下来以备不时之需

然后我发现日志rawHeaders和发现所有的数据可用的url

我试了一下

app.post("/news-letter", (req,res) => {
    console.log(req.body);
    res.redirect(req.rawHeaders[33]);
})

谢谢大家提供这些信息。这是非常烦人的。

把这个添加到你的代码中,你就再也不用考虑它了:

var app = express();

app.all("*", function (req, res, next) {  // runs on ALL requests
    req.fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl
        next()
})

您还可以在那里执行或设置其他操作,例如将日志记录到控制台。

我建议使用originalUrl而不是URL:

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

查看originalUrl的描述: http://expressjs.com/api.html#req.originalUrl

在我们的系统中,我们这样做,所以originalUrl对我们很重要:

  foo = express();
  express().use('/foo', foo);
  foo.use(require('/foo/blah_controller'));

Blah_controller是这样的:

  controller = express();
  module.exports = controller;
  controller.get('/bar/:barparam', function(req, res) { /* handler code */ });

我们的url有这样的格式

www.example.com/foo/bar/:barparam

因此,我们需要req。originalUrl在bar控制器的获取处理程序。

下面的代码对我来说就足够了!

const baseUrl = `${request.protocol}://${request.headers.host}`;
// http://127.0.0.1:3333

你需要使用req.headers.host + req.url来构造它。当然,如果你是在不同的端口,你得到的想法;-)