假设我的示例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.headers.host + req.url来构造它。当然,如果你是在不同的端口,你得到的想法;-)

其他回答

用这个,

var url = req.headers.host + '/' + req.url;
const fullUrl = `${protocol}://${host}:${port}${url}`
      
    const responseString = `Full URL is: ${fullUrl}`;                       
    res.send(responseString);  
})

我发现它有点PITA,以获得所请求的url。我不敢相信没有更简单的快递方式了。应该是req。requested_url

但我是这样设置的:

var port = req.app.settings.port || cfg.port;
res.locals.requested_url = req.protocol + '://' + req.host  + ( port == 80 || port == 443 ? '' : ':'+port ) + req.path;

我建议使用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控制器的获取处理程序。

通常我依赖这2个,取决于服务器和代理是否存在:

req.socket.remoteAddress

req.headers.referer