Disons que mon exemple d'URL est
et je dis que j'ai l'itinéraire suivant
app.get('/one/two', function (req, res) {
var url = req.url;
}
La valeur de url
sera /one/two
.
Comment obtenir l' URL complète dans Express? Par exemple, dans le cas ci-dessus, j'aimerais recevoir http://example.com/one/two
.
Réponses:
Le protocole est disponible en
req.protocol
. docs icihttp
sauf si vous voyez qu'ilreq.get('X-Forwarded-Protocol')
est défini et a la valeurhttps
, auquel cas vous savez que c'est votre protocoleL'hôte vient
req.get('host')
comme Gopal l'a indiquéJ'espère que vous n'avez pas besoin d'un port non standard dans vos URL, mais si vous aviez besoin de le connaître, vous l'auriez dans l'état de votre application, car c'est tout ce que vous avez transmis
app.listen
au démarrage du serveur. Cependant, dans le cas d'un développement local sur un port non standard, Chrome semble inclure le port dans l'en-tête de l'hôte doncreq.get('host')
retournelocalhost:3000
, par exemple. Donc, au moins pour les cas d'un site de production sur un port standard et naviguant directement vers votre application express (sans proxy inverse), l'en-host
tête semble faire ce qu'il faut concernant le port dans l'URL.Le chemin vient de
req.originalUrl
(merci @pgrassant). Notez que cela inclut la chaîne de requête. docs ici sur req.url et req.originalUrl . Selon ce que vous avez l'intention de faire avec l'URL, la valeuroriginalUrl
peut être ou non correcte par rapport àreq.url
.Combinez-les tous ensemble pour reconstruire l'URL absolue.
la source
req.get('Host')
au lieu dereq.host
cela donne l'hôte plus la section de port.host
paramètre dans les en-têtes de demande peut être usurpé. Il y a une "attaque d'en-tête d'hôte" possible si vous utilisezres.host
cette méthode. Dans le framework Django, ils ont une variable «hôtes autorisés» qui est utilisée pour empêcher une telle attaque. J'utilise une variable de configuration qui est la mienne etroot_url
qui peut être ajoutée à lareq.url
pour terminer. À propos de l'attaque: skeletonscribe.net/2013/05/…req.originalUrl
sans paramètres, faites-le simplementreq.originalUrl.split("?").shift()
. Source: stackoverflow.com/a/32118818/2037431Au lieu de concaténer les choses ensemble par vous-même, vous pouvez utiliser l'API node.js pour les URL et transmettre
URL.format()
les informations depuis express.Exemple:
la source
req.get('host')
retourne uniquement la partie du nom d'hôte , pas le port. Je ne sais pas pourquoi, mais maintenant je récupère le numéro de port dans les paramètres et utilise lehostname
champ à la place dehost
.pathname
, je pense que vous voulez direpath
. Qui inclut la recherche / recherche de chaînesJe l'ai trouvé un peu PITA pour obtenir l'URL demandée. Je ne peux pas croire qu'il n'y ait pas de moyen plus simple d'exprimer. Devrait simplement être req.requested_url
Mais voici comment je l'ai réglé:
la source
req.port
Existe- t- il? Ce n'est pas dans la documentation Express?req.app.settings.port
Utilisation de url.format :
Cela prend en charge tous les protocoles et inclut le numéro de port. Si vous n'avez pas de chaîne de requête dans votre originalUrl, vous pouvez utiliser cette solution de nettoyage:
Si vous avez une chaîne de requête:
la source
Voici un excellent moyen d'ajouter une fonction que vous pouvez appeler sur l'objet req pour obtenir l'url
Vous avez maintenant une fonction que vous pouvez appeler sur demande si vous en avez besoin.
la source
rendre req.host/req.hostname efficace doit avoir deux conditions lorsque Express derrière des proxys :
app.set('trust proxy', 'loopback');
dans app.jsX-Forwarded-Host
l'en-tête doit être spécifié par vous-même dans le serveur Web. par exemple. apache, nginxnginx :
apache :
la source
127.0.0.1
dereq.get('host')
Utilisez ceci,
la source
ou
la source
Vous devez le construire en utilisant
req.headers.host + req.url
. Bien sûr, si vous hébergez dans un port différent et que vous avez l'idée ;-)la source
req.protocol
Je suggérerais d'utiliser originalUrl au lieu de l'URL:
Voir la description de originalUrl ici: http://expressjs.com/api.html#req.originalUrl
Dans notre système, nous faisons quelque chose comme ça, donc originalUrl est important pour nous:
blah_controller ressemble à ceci:
Nos URL ont donc le format:
Par conséquent, nous avons besoin de req.originalUrl dans le gestionnaire get du contrôleur de barre.
la source
Mon code ressemble à ceci,
params['host_url'] = req.protocol + '://' + req.headers.host + req.url;
la source
J'utilise le package de noeud 'url' (URL d'installation npm)
Ce qu'il fait, c'est lorsque vous appelez
il vous donnera la possibilité de récupérer tout ou partie de l'url. Plus d'informations ici: https://github.com/defunctzombie/node-url
Je l'ai utilisé de la manière suivante pour obtenir tout ce qui vient après le / dans http://www.example.com/ pour l'utiliser comme variable et afficher un profil particulier (un peu comme Facebook: http: //www.facebook. com / nom d'utilisateur )
Bien que cela fonctionne, vous devez créer votre itinéraire de cette façon dans votre fichier server.js:
Et définissez votre fichier d'itinéraire de cette façon:
la source
Vous pouvez utiliser cette fonction dans l'itinéraire comme celui-ci
req.protocol
vous donnera http ou https,req.headers.host
vous donnera le nom d'hôte complet comme www.google.com,req.originalUrl
donnera le restepathName
(dans votre cas/one/two
)la source
Merci à tous pour ces informations. C'est incroyablement ennuyeux.
Ajoutez ceci à votre code et vous n'aurez plus jamais à y penser:
Vous pouvez également faire ou définir d'autres choses, telles que la connexion à la console.
la source
Juste le code ci-dessous me suffisait!
la source