comment obtenir une demande de chemin avec express objet req.
Je suis en utilisant express + node.js et j'ai un req objet, la demande dans le navigateur /compte mais lorsque je me connecte req.chemin-je obtenir '/' --- pas de '/compte".
//auth required or redirect
app.use('/account', function(req, res, next) {
console.log(req.path);
if ( !req.session.user ) {
res.redirect('/login?ref='+req.path);
} else {
next();
}
});
req.le chemin est /quand il devrait être /compte ??
- essayez
req.route.path
TypeError: Cannot read property 'path' of undefined
- req.l'itinéraire.chemin d'accès est correct et documenté ici. La version d'express que vous utilisez?
- Je suis en utilisant express 3.x
- Je vais avoir le même problème.
req.route
est pas défini. Im en utilisant express 3.4.4. Ce qui peut causer de la route pour être indéfini? - req.l'itinéraire.chemin me donne encore /créer au lieu de /quizz/créer, qui est la totalité de l'URL
- C'est un comportement intentionnel. Et vous devez l'embrasser. Votre gestionnaire doit se soucient pas le chemin d'accès complet, mais seulement sur le "local" de la partie du chemin d'accès. C'est la partie après le chemin, il a été monté sur. Cela rend la fonction de gestionnaire plus facile à réutiliser dans d'autres contextes.
- Il y a maintenant un moyen de le faire dans une prochaine version. Voir ma réponse ci-dessous.
Vous devez vous connecter pour publier un commentaire.
Après avoir eu un peu de jouer moi-même, vous devez utiliser:
console.log(req.originalUrl)
const path = req.originalUrl.replace(/\?.*$/, '');
Dans certains cas, vous devez utiliser:
Cela vous donne le chemin d'accès, au lieu de l'intégrale de l'URL demandée. Par exemple, si vous êtes uniquement intéressé par la page que l'utilisateur a demandé et pas tous les types de paramètres de l'url:
req.chemin d'accès, vous pouvez:
/demo
devrait également potentiellement vérifier/demo/
).Il devrait être:
req.url
express 3.1.x
Si vous voulez vraiment obtenir seul "chemin" sans querystring, vous pouvez utiliser
url
bibliothèque pour analyser et obtenir que la voie de la partie de l'url.req.query.ref
si la connexion réussieLa raison pour cela est que l'Express soustrait le chemin de votre fonction de gestionnaire est montée sur, qui est
'/account'
dans ce cas.Pourquoi font-ils cela?
Car il est plus facile de réutiliser la fonction de gestionnaire. Vous pouvez faire une fonction de gestionnaire qui ne signifie différentes choses pour
req.path === '/'
etreq.path === '/goodbye'
par exemple:Ensuite, vous pouvez monter à plusieurs points de terminaison:
Donner:
Pour la version 4.x vous pouvez maintenant utiliser le
req.baseUrl
en plus dereq.path
pour obtenir le chemin d'accès complet. Par exemple, l'OP voudrais maintenant faire quelque chose comme:Pour compléter, voici un exemple étendu à partir de la documentation, qui bien encapsule tout ce que vous devez savoir sur l'accès aux chemins/Url dans tous les cas avec express:
JS:
Basée sur: https://expressjs.com/en/api.html#req.originalUrl
Conclusion: Comme c1moore réponse états ci-dessus, utilisez:
après l'exécution de je voir le suivant dans la console et j'obtiens un résultat parfait
dans mon navigateur.