Estoy usando express + node.js y tengo un objeto req, la solicitud en el navegador es / account pero cuando registro req.path obtengo '/' --- not '/ 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 es / cuando debería ser / cuenta ??
javascript
node.js
express
chovy
fuente
fuente

TypeError: Cannot read property 'path' of undefinedreq.routees indefinido. Estoy usando express 3.4.4. ¿Qué puede hacer que la ruta sea indefinida?Respuestas:
Después de jugar un poco, deberías usar:
console.log(req.originalUrl)fuente
const path = req.originalUrl.replace(/\?.*$/, '');En algunos casos deberías usar:
Esto le proporciona la ruta, en lugar de la URL completa solicitada. Por ejemplo, si solo está interesado en qué página solicitó el usuario y no en todo tipo de parámetros, la URL:
req.path te dará:
fuente
/demotambién debería potencialmente verificar/demo/).req.pathes la abreviatura deurl.parse(req.url).pathnamey esta debería ser la respuesta aceptadareq.pathle brinda la ruta relativa a donde está montada su aplicación. Si está montado en la raíz, entonces esto es correcto, pero para una ruta/my/path, dentro de una aplicación montada en/my,req.urldará/path.Para complementar, aquí hay un ejemplo ampliado de la documentación, que envuelve muy bien todo lo que necesita saber sobre el acceso a las rutas / URL en todos los casos con express:
Basado en: https://expressjs.com/en/api.html#req.originalUrl
Conclusión: como dice la respuesta de c1moore arriba, use:
fuente
Debería ser:
req.urlexpreso 3.1.x
fuente
La razón de esto es que Express resta la ruta en la que está montada su función de controlador, que es
'/account'en este caso.¿Por qué hacen esto?
Porque facilita la reutilización de la función del controlador. Puede hacer una función de controlador que haga cosas diferentes para
req.path === '/'yreq.path === '/goodbye'por ejemplo:Luego puede montarlo en múltiples puntos finales:
Dando:
fuente
Si realmente desea obtener solo la "ruta" sin la cadena de consulta, puede usar la
urlbiblioteca para analizar y obtener solo la parte de la ruta de la URL.fuente
req.query.refsi el inicio de sesión es exitosoreq.pathes solo un alias paraurl.parse(req.url).pathnamePara la versión 4.x ahora puede usar
req.baseUrlademás dereq.pathpara obtener la ruta completa. Por ejemplo, el OP ahora haría algo como:fuente
después de ejecutar, veo lo siguiente en la consola y obtengo un resultado perfecto en mi navegador.
fuente