res req query node headers example engine end app node.js express middleware

node.js - query - req.locals frente a res.locals frente a res.data frente a req.data frente a app.locals en Express middleware



res end express (1)

Como mencionó, se pueden req.locals tanto req.locals , res.locals o incluso su propia clave res.userData definida. Sin embargo, cuando use un motor de vista con Express, puede establecer datos intermedios en res.locals en su middleware, y esos datos estarán disponibles en su vista (vea esta publicación ). Es una práctica común establecer datos intermedios dentro del middleware en req.locals para evitar sobrescribir los datos de vista en res.locals , aunque esto no está documentado oficialmente.

res.locals 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: http://expressjs.com/en/api.html#res.locals

Se hacen algunas preguntas similares, pero mi pregunta es que si quiero propagar resultados intermedios me llevo bien con 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 los diferentes middleware, ya que persistirán en middlewares, pero eso sería contrario al uso convencional de app.locals. Se usa 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 próxima solicitud.

¿Cuál es la forma óptima y estándar de propagar resultados intermedios a través de middleware?