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.
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?