Jak uzyskać pełny adres URL w Express?
Powiedzmy, że mój przykładowy adres url to
And I say I have the following route
app.get('/one/two', function (req, res) {
var url = req.url;
}
Wartość url
będzie /one/two
.
Jak uzyskać pełny url w Expressie?
Na przykład w powyższym przypadku chciałbym otrzymać http://example.com/one/two
.
13 answers
-
Protokół jest dostępny jako
req.protocol
. docs here- przed Expressem 3.0 PROTOKÓŁ można założyć jako
http
, chyba że widzisz, żereq.get('X-Forwarded-Protocol')
jest ustawiony i ma wartośćhttps
, w którym to przypadku wiesz, że jest to Twój protokół
- przed Expressem 3.0 PROTOKÓŁ można założyć jako
-
Nosiciel pochodzi z
req.get('host')
jak wskazał Gopal Mam nadzieję, że nie potrzebujesz niestandardowego portu w swoich adresach URL, ale gdybyś musiał go znać, miałbyś go w stanie aplikacji ponieważ to jest to, co przekazałeś
app.listen
w czasie uruchamiania serwera. Jednak w przypadku lokalnego rozwoju na niestandardowym porcie, Chrome wydaje się zawierać port w nagłówku hosta, więcreq.get('host')
zwracalocalhost:3000
, na przykład. Tak więc przynajmniej w przypadku witryny produkcyjnej na standardowym porcie i przeglądania bezpośrednio do aplikacji express (bez odwrotnego proxy), nagłówekhost
wydaje się działać poprawnie w odniesieniu do portu w adresie URL.Ścieżka pochodzi z
req.originalUrl
(dzięki @pgrassant). Uwaga dotyczy to łańcucha zapytania. dokumenty tutaj na req.url i req.originalUrl . W zależności od tego, co zamierzasz zrobić z adresem URL,originalUrl
może być poprawną wartością w porównaniu doreq.url
.
Połącz te wszystkie razem, aby odtworzyć absolutny adres URL.
var fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-28 21:29:42
Zamiast łączenia rzeczy na własną rękę, możesz zamiast tego użyć węzła.js API dla adresów URL i przekazać URL.format()
informacje z express.
Przykład:
var url = require('url');
function fullUrl(req) {
return url.format({
protocol: req.protocol,
host: req.get('host'),
pathname: req.originalUrl
});
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-28 14:24:53
Znalazłem trochę PITA, aby uzyskać żądany adres url. Nie mogę uwierzyć, że nie ma łatwiejszego sposobu na ekspres. Powinien być tylko req.requested_url
Ale tak to ustawiłem:
var port = req.app.settings.port || cfg.port;
res.locals.requested_url = req.protocol + '://' + req.host + ( port == 80 || port == 443 ? '' : ':'+port ) + req.path;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-05 22:08:48
Using url.format :
var url = require('url');
Obsługuje wszystkie protokoły i zawiera numer portu. Jeśli nie masz łańcucha zapytania w swoim originalUrl możesz użyć tego rozwiązania cleaner:
var requrl = url.format({
protocol: req.protocol,
host: req.get('host'),
pathname: req.originalUrl,
});
Jeśli masz ciąg zapytania:
var urlobj = url.parse(req.originalUrl);
urlobj.protocol = req.protocol;
urlobj.host = req.get('host');
var requrl = url.format(urlobj);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-02 07:39:46
Oto świetny sposób na dodanie funkcji, którą możesz wywołać w obiekcie req, aby uzyskać adres url
app.use(function(req, res, next) {
req.getUrl = function() {
return req.protocol + "://" + req.get('host') + req.originalUrl;
}
return next();
});
Teraz masz funkcję, którą możesz wywołać na żądanie, jeśli jej potrzebujesz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-06 23:07:32
Make req.host / req.Nazwa hosta skuteczna musi mieć dwa warunki, gdy wyrażają się za proxy :
-
app.set('trust proxy', 'loopback');
w aplikacji.js -
X-Forwarded-Host
nagłówek musi być określony przez Ciebie w serwerze. np. 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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-15 01:58:16
Użyj tego,
var url = req.headers.host + '/' + req.url;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-09 04:44:08
Musisz go skonstruować za pomocą req.headers.host + req.url
. Oczywiście jeśli hostujesz w innym porcie i taki masz pomysł; -)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-17 00:08:00
Mój kod wygląda tak,
params['host_url'] = req.protocol + '://' + req.headers.host + req.url;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-23 09:47:36
Sugerowałbym użycie originalUrl zamiast URL:
var url = req.protocol + '://' + req.get('host') + req.originalUrl;
Zobacz opis oryginału tutaj: http://expressjs.com/api.html#req.originalUrl
W naszym systemie robimy coś takiego, więc originalUrl jest dla nas ważny:
foo = express();
express().use('/foo', foo);
foo.use(require('/foo/blah_controller'));
Blah_controller wygląda tak:
controller = express();
module.exports = controller;
controller.get('/bar/:barparam', function(req, res) { /* handler code */ });
Więc nasze adresy URL mają format:
www.example.com/foo/bar/:barparam
Dlatego potrzebujemy req.originalUrl w kontrolerze paska get handler.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-18 19:30:41
var full_address = req.protocol + "://" + req.headers.host + req.originalUrl;
Lub
var full_address = req.protocol + "://" + req.headers.host + req.baseUrl;`
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-18 10:08:16
Używam pakietu node ' url ' (npm install url)
To, co robi, gdy dzwonisz
url.parse(req.url, true, true)
Daje możliwość pobrania całości lub części adresu url. Więcej informacji tutaj: https://github.com/defunctzombie/node-url
Użyłem go w następujący sposób, aby uzyskać to, co przychodzi po / in http://www.example.com / aby użyć jako zmiennej i podciągnąć konkretny profil (coś jak 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);
Aby to zadziałało, musisz stworzyć swoją trasę w ten sposób na serwerze.plik js:
self.routes['/:username'] = require('./routes/users');
I ustaw plik trasy w ten sposób:
router.get('/:username', function(req, res) {
//here comes the url parsing code
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-12 13:56:36
Odkryłem, że używając poniższego kodu możesz uzyskać swój adres url. Następnie przejdź do krojenia go i decydując, co dalej.
app.use(function(req, res, next) {
console.log(req.originalUrl);
res.send(req.originalUrl);
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-05 09:56:42