Bueno, mi pregunta es si quiero pasar alguna variable del primer middleware a otro middleware, e intenté hacer esto, pero hubo " req.somevariable
dado como 'indefinido'".
//app.js
..
app.get('/someurl/', middleware1, middleware2)
...
////middleware1
...
some conditions
...
res.somevariable = variable1;
next();
...
////middleware2
...
some conditions
...
variable = req.somevariable;
...
javascript
node.js
express
middleware
next
usuario2791897
fuente
fuente
res
en middleware1 e intenta obtenerloreq
en middleware2.Local variables are available in middleware via req.app.locals
expressjs.com/pt-br/api.html#app.localsRespuestas:
Adjunte su variable al
req
objeto, nores
.En vez de
Tener:
Como otros han señalado,
res.locals
es la forma recomendada de pasar datos a través de middleware.fuente
res.locals
, noreq.res.locals
.res.locals.myVar
Es el camino a seguir.Para eso está el objeto res.locals . La configuración de variables directamente en el objeto de solicitud no es compatible ni está documentada. res.locals está garantizado para mantener el estado durante la vida de una solicitud.
res.locals
Para recuperar la variable en el siguiente middleware:
fuente
req
objeto expressjs.com/en/guide/writing-middleware.html . Mire la secciónMiddleware function requestTime
res.json({})
, por ejemplo , etc.,res.locals
solo está disponible en el back-end durante la vida de la solicitud. expressjs.com/en/5x/api.htmlNo creo que la mejor práctica sea pasar una variable como
req.YOUR_VAR
. Es posible que desee considerarreq.YOUR_APP_NAME.YOUR_VAR
oreq.mw_params.YOUR_VAR
.Le ayudará a evitar sobrescribir otros atributos.
Actualización 31 de mayo de 2020
res.locals es lo que está buscando, el objeto está limitado a la solicitud.
Un objeto que contiene variables locales de respuesta en el ámbito de la solicitud y, por lo tanto, solo está disponible para las vistas representadas durante ese ciclo de solicitud / respuesta (si corresponde). De lo contrario, esta propiedad es idéntica a app.locals.
Esta propiedad es útil para exponer información a nivel de solicitud, como el nombre de la ruta de solicitud, el usuario autenticado, la configuración del usuario, etc.
fuente
req.YOUR_APP_NAME = {}
inicialmente? Solo intente escribirle yreq.YOUR_APP_NAME.someVar
recibirá un error quereq.YOUR_APP_NAME
aún no está definido.router.use(function(req,res,next){req.YOUR_APP_NAME = {};next()})
req.APP_NS = req.APP_NS || {}; req.APP_NS.somevar = 'value'
.next
función, activará el controlador de error express y se desconectará. revisa los documentos.Eso es porque
req
yres
son dos objetos diferentes.Debe buscar la propiedad en el mismo objeto al que la agregó.
fuente
El truco es bastante simple ... El ciclo de solicitud sigue vivo. Simplemente puede agregar una nueva variable que creará una llamada temporal
Como puede manejar su solicitud en el primer middleware
En el middleware 1 maneja su lógica y almacena su valor como a continuación:
En el middleware 2 puede capturar este valor del middleware 1 haciendo lo siguiente:
fuente
Como se mencionó anteriormente, res.locals es una buena forma (recomendada) de hacer esto. Vea aquí un tutorial rápido sobre cómo hacer esto en Express.
fuente