假设我的示例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.socket.remoteAddress

req.headers.referer

其他回答

我使用节点包'url' (npm install url)

它的作用是当你打电话的时候

url.parse(req.url, true, true)

它将给你检索url的全部或部分的可能性。更多信息请访问:https://github.com/defunctzombie/node-url

我以以下方式使用它来获取http://www.example.com/中/之后的任何内容作为变量并拉出特定的配置文件(有点像facebook: http://www.facebook.com/username)

    var url = require('url');
    var urlParts = url.parse(req.url, true, true);
    var pathname = urlParts.pathname;
    var username = pathname.slice(1);

不过,为了实现这一点,你必须在server.js文件中以这种方式创建路由:

self.routes['/:username'] = require('./routes/users');

这样设置你的路由文件:

router.get('/:username', function(req, res) {
 //here comes the url parsing code
}

我的代码是这样的,

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

我发现它有点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
  });
}
async function (request, response, next) {
  const url = request.rawHeaders[9] + request.originalUrl;
  //or
  const url = request.headers.host + request.originalUrl;
}