[Node.js] 如何在Express中獲得完整的網址?



Answers

您可以使用node.js API作為URL並將URL.format()的信息傳遞給URL.format() ,而不是將它們連接在一起。

例:

var url = require('url');

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

假設我的示例網址是

http://example.com/one/two

我說我有以下路線

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

url的值將是/one/two url

如何在Express中獲得完整的網址 ? 例如,在上述情況下,我希望收到http://example.com/one/two




使用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);



用這個,

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




我實際上發現,通過使用下面的代碼,你可以得到你的網址。 然後繼續切片並決定下一步。

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



使req.host/req.hostname生效時必須有兩個條件: Express在代理之後

  1. app.set('trust proxy', 'loopback'); 在app.js中
  2. X-Forwarded-Host頭必須由您自己在網絡服務器中指定。 例如。 apache,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;
    }
}

apache

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



我的代碼看起來像這樣,

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




Links