J'utilise express + node.js et j'ai un objet req, la requête dans le navigateur est / account mais lorsque je connecte req.path, j'obtiens '/' --- pas '/ account'.
//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.path est / quand il devrait être / account ??
javascript
node.js
express
chovy
la source
la source
TypeError: Cannot read property 'path' of undefined
req.route
n'est pas défini. J'utilise express 3.4.4. Qu'est-ce qui peut rendre la route indéfinie?Réponses:
Après avoir joué un peu moi-même, vous devriez utiliser:
console.log(req.originalUrl)
la source
const path = req.originalUrl.replace(/\?.*$/, '');
Dans certains cas, vous devez utiliser:
Cela vous donne le chemin, au lieu de l'URL demandée complète. Par exemple, si vous n'êtes intéressé que par la page demandée par l'utilisateur et non par tous les types de paramètres, l'url:
req.path vous donnera:
la source
/demo
devrait également potentiellement vérifier/demo/
).req.path
est le raccourci deurl.parse(req.url).pathname
et cela devrait être la réponse acceptéereq.path
vous donne le chemin d'accès relatif à l'endroit où votre application est montée. S'il est monté à la racine, cela est correct, mais pour un chemin/my/path
, dans une application montée sur/my
,req.url
donnera/path
.Pour compléter, voici un exemple développé à partir de la documentation, qui englobe bien tout ce que vous devez savoir sur l'accès aux chemins / URL dans tous les cas avec express:
Basé sur: https://expressjs.com/en/api.html#req.originalUrl
Conclusion: comme l' indique la réponse de c1moore ci-dessus, utilisez:
la source
Ça devrait être:
req.url
express 3.1.x
la source
La raison en est qu'Express soustrait le chemin sur lequel votre fonction de gestionnaire est montée, ce qui est
'/account'
dans ce cas.Pourquoi font-ils cela?
Parce que cela facilite la réutilisation de la fonction de gestionnaire. Vous pouvez créer une fonction de gestionnaire qui effectue différentes choses pour
req.path === '/'
etreq.path === '/goodbye'
par exemple:Ensuite, vous pouvez le monter sur plusieurs points de terminaison:
Donnant:
la source
Si vous voulez vraiment obtenir uniquement "chemin" sans chaîne de requête, vous pouvez utiliser la
url
bibliothèque pour analyser et obtenir uniquement une partie du chemin de l'url.la source
req.query.ref
si la connexion est réussiereq.path
est juste un alias poururl.parse(req.url).pathname
Pour la version 4.x, vous pouvez désormais utiliser
req.baseUrl
en plus dereq.path
pour obtenir le chemin complet. Par exemple, l'OP ferait maintenant quelque chose comme:la source
après l'exécution, je vois ce qui suit dans la console et j'obtiens un résultat parfait dans mon navigateur.
la source