如何获得快速的完整网址?如何获得快速的完整网址?(How to get the full url i

2019-05-13 13:17发布

比方说,我的示例网址

http://example.com/one/two

我说我有以下航线

app.get('/one/two', function (req, res) {
    var url = req.url;
}

url将是/one/two

我如何在快速的完整网址 ? 例如,在上述情况下,我想接收http://example.com/one/two

Answer 1:

  1. 该协议可作为req.protocol 。 这里文档

    1. 快递3.0之前,该协议可以承担是http ,除非你看到req.get('X-Forwarded-Protocol')设置并具有价值https ,在这种情况下,你知道那是你的协议
  2. 主机来自req.get('host')作为戈帕尔曾表示

  3. 希望你不需要在URL中的非标准端口,但如果你确实需要知道你必须在你的应用程序的状态,因为它是不管你传递给app.listen在服务器启动时。 然而,在非标准端口上本地发展的情况下,铬似乎包括在主机头部的端口,以便req.get('host')返回localhost:3000 ,例如。 因此,至少在生产现场的标准端口上,并直接浏览您的明确程序(不反向代理)的情况下, host头似乎做关于URL中的端口是正确的。

  4. 该路径从何而来req.originalUrl (感谢@pgrassant)。 注意这是否包括查询字符串。 这里文档上req.url和req.originalUrl 。 根据您打算与URL做什么, originalUrl可能会或可能不会像比较正确的值req.url

结合这些一起重建的绝对URL。

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


Answer 2:

相反,在串联在一起的东西你自己的,你也可以使用Node.js的API的网址,并通过URL.format()从明确的信息。

例:

var url = require('url');

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


Answer 3:

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


Answer 4:

使用url.format :

var url = require('url');

这种支持所有协议,包括端口号。 如果你没有在你的originalUrl查询字符串,你可以使用此清洁的解决方案:

var requrl = url.format({
    protocol: req.protocol,
    host: req.get('host'),
    pathname: req.originalUrl,
});

如果你有一个查询字符串:

var urlobj = url.parse(req.originalUrl);
urlobj.protocol = req.protocol;
urlobj.host = req.get('host');
var requrl = url.format(urlobj);


Answer 5:

这里是添加你可以在REQ对象调用来获取网址功能的好方法

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

现在你有,你可以,如果你需要它按需调用一个函数。



Answer 6:

使req.host/req.hostname有效必须具备两个条件时, 代理背后快递 :

  1. app.set('trust proxy', 'loopback'); 在app.js
  2. X-Forwarded-Host通过你的Web服务器自己的头必须指定。 例如。 阿帕奇,Nginx的

nginx的

server {
    listen myhost:80;
    server_name  myhost;
    location / {
        root /path/to/myapp/public;
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://myapp:8080;
    }
}

阿帕奇

<VirtualHost myhost:80>
    ServerName myhost
    DocumentRoot /path/to/myapp/public
    ProxyPass / http://myapp:8080/
    ProxyPassReverse / http://myapp:8080/
</VirtualHost>


Answer 7:

用这个,

var url = req.headers.host + '/' + req.url;


Answer 8:

您需要使用来构建它req.headers.host + req.url 。 当然,如果你正在主持一个不同的端口,这样你的想法;-)



Answer 9:

我会建议使用originalUrl而非网址:

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 */ });

因此,我们的网址的格式为:

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

因此,我们需要req.originalUrl条状控制器获取处理程序。



Answer 10:

我的代码看起来像这样,

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



Answer 11:

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

要么

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


Answer 12:

我使用节点包“网址”(NPM安装URL)

当你调用它所做的是

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

它会给你找回URL的全部或部分的可能性。 更多资讯: https://github.com/defunctzombie/node-url

我用它在以下方式获得任何来自后在/ http://www.example.com/作为一个变量使用,并拉起一个特定的个人资料(有点像Facebook的: HTTP://www.facebook。 COM /用户名 )

    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
}


Answer 13:

我却发现,通过使用此代码下面你可以得到你的网址。 然后进行切片起来,并决定下一步做什么。

app.use(function(req, res, next) {
console.log(req.originalUrl);
res.send(req.originalUrl);
  });


Answer 14:

谢谢大家对这个信息。 这是令人难以置信的烦人。

添加到您的代码,你就永远不会有再想想:

var app = express();

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

你可以做或设置其他的东西有作为,如日志安慰。



文章来源: How to get the full url in Express?