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 undefined
req.route
es 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
/demo
también debería potencialmente verificar/demo/
).req.path
es la abreviatura deurl.parse(req.url).pathname
y esta debería ser la respuesta aceptadareq.path
le 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.url
dará/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.url
expreso 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
url
biblioteca para analizar y obtener solo la parte de la ruta de la URL.fuente
req.query.ref
si el inicio de sesión es exitosoreq.path
es solo un alias paraurl.parse(req.url).pathname
Para la versión 4.x ahora puede usar
req.baseUrl
además dereq.path
para 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