665 votes

Comment faire pour obtenir l'adresse url complète dans express.js?

Disons que mon exemple d'url est: http://example.com/one/two et je dis

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

La valeur de "l'url" /un/deux"

Comment puis-je obtenir l'adresse url complète de la valeur? Ce que je veux "url" est "http://example.com/one/two"

EDIT: mise à Jour en question puisqu'il s'agit vraiment d'exprimer et de ne pas la vanille nœud.

961voto

Peter Lyons Points 47794
  1. Le protocole est disponible en req.protocol. docs ici

    1. Avant de express 3.0, le protocole que vous pouvez assumer http , sauf si vous voyez qu' req.get('X-Forwarded-Protocol') est défini et a pour valeur https, dans ce cas, vous savez que c'est votre protocole
  2. L'hôte vient d' req.get('host') comme Gopal a indiqué

  3. J'espère que vous n'avez pas besoin d'un port non standard dans votre Url, mais si vous avez besoin de savoir ce que vous auriez dans votre état de l'application, car c'est ce que vous avez passé de app.listen au démarrage du serveur. Toutefois, dans le cas de développement local sur un port non standard, google Chrome semble inclure le port dans l'en-tête d'hôte, de sorte req.get('host') retours localhost:3000, par exemple. Ainsi, au moins pour le cas d'un site de production sur un standard de port et de navigation directement sur votre express app (sans proxy inverse), l' host - tête semble faire la bonne chose au sujet du port dans l'URL.

  4. Le chemin vient d' req.originalUrl (merci @pgrassant). Remarque: cette liste N'inclure la chaîne de requête. docs ici, sur la req.url et req.originalUrl. En fonction de ce que vous comptez faire avec l'URL, originalUrl peut ou peut ne pas être la bonne valeur par rapport à l' req.url.

Combiner tous ensemble pour reconstruire l'URL absolue.

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

168voto

Michael Weibel Points 615

Au lieu de la concaténation de l'ensemble des choses sur votre propre, vous pouvez à la place utiliser l'node.js API pour les Url et les transmettre URL.format() les informations de l'express.

41voto

chovy Points 8012

Je l'ai trouvé un peu de pain PITA pour obtenir l'url demandée. Je ne peux pas croire il n'y a pas un moyen plus facile à exprimer. Faut juste être req.requested_url

Mais voici comment j'ai mis:

var port = req.app.settings.port || cfg.port;
res.locals.requested_url = req.protocol + '://' + req.host  + ( port == 80 || po
rt == 443 ? '' : ':'+port ) + req.path;

25voto

lostintranslation Points 1844

Voici une excellente façon d'ajouter une fonction que vous pouvez appeler sur la req objet pour obtenir l'url

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

Maintenant, vous avez une fonction que vous pouvez appeler à la demande, si vous en avez besoin.

8voto

g13n Points 1520

Vous avez besoin de le construire à l'aide de req.headers.host + req.url. Bien sûr, si vous accueillent dans un autre port, et vous obtenez l'idée ;-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X