Se hacen algunas preguntas similares, pero mi pregunta es que si quiero propagar los resultados intermedios que obtengo a lo largo de los diferentes middleware de enrutamiento, ¿cuál es la mejor manera de hacerlo?
app.use(f1); app.use(f2); app.use(f3);
function f1(req,res,next) {
//some database queries are executed and I get results, say x1
res.locals.dbResults = {...};
next();
}
function f2(req,res,next) {
// more processing based upon req.locals.dbResults
res.locals.moreResults = {....};
next();
}
// ...
Creo que puedo obtener la misma propagación de datos a través de los diferentes middleware utilizando req .locals. Además, parece que los objetos de solicitud y respuesta tienen las propiedades locales inicializadas en un objeto vacío al comienzo de la solicitud.
Además, ¿también se pueden establecer las propiedades res.mydata o req.mydata?
En teoría, app.locals también se puede usar para pasar estos datos a través de diferentes middleware, ya que persistirán en los middlewares, pero eso sería contrario al uso convencional de app.locals. Se utiliza más para datos específicos de la aplicación. También será necesario borrar esos datos al final del ciclo de solicitud-respuesta para que se puedan usar las mismas variables para la siguiente solicitud.
¿Cuál es la forma óptima y estándar de propagar resultados intermedios a través de middleware?
fuente
res.render()
tiene prioridad sobreres.locals
. Entonces, alguien podría sobrescribir accidentalmente la variable asíres.locals = { name: 'Jake' } // later in code... res.render('user.template', { name: 'Tony' }, (err, html) => {}) // the 'name' variable is now 'Tony'