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


当前回答

var full_address = req.protocol + "://" + req.headers.host + req.originalUrl;

or

var full_address = req.protocol + "://" + req.headers.host + req.baseUrl;

其他回答

我发现它有点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;

你可以使用node.js API来获取url,并将来自express的信息传递给URL.format(),而不是自己将这些东西连接在一起。

例子:

var url = require('url');

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

你可以结合req。协议,要求。主机名和req.originalUrl。请注意要求。主机名,而不是请求。Host或req.get(“Host”),这是可行的,但更难阅读。

const completeUrl = `${req.protocol}://${req.hostname}${req.originalUrl}`;
var full_address = req.protocol + "://" + req.headers.host + req.originalUrl;

or

var full_address = req.protocol + "://" + req.headers.host + req.baseUrl;

我的代码是这样的,

params['host_url'] = req.protocol + '://' + req.headers.host + req.url;