Des questions similaires ont été posées, mais ma question est la suivante: si je souhaite propager des résultats intermédiaires via différents middleware de routage, quel est le meilleur moyen de le faire?
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();
}
// ...
Je pense que je peux obtenir la même propagation de données à travers les différents intergiciels en utilisant req. Locales. En outre, il apparaît que les objets requête et réponse ont tous les deux les propriétés locales initialisées à un objet vide au début de la requête.
En outre, vous pouvez également définir les propriétés res.mydata ou req.mydata?
En théorie, app.locals peut également être utilisé pour transmettre ces données à travers les différents middleware, car elles persisteront dans les middlewares, mais cela irait à l'encontre de l'utilisation conventionnelle d'app.locals. Il est plus utilisé pour les données spécifiques à l'application. Il sera également nécessaire d'effacer ces données à la fin du cycle requête-réponse afin que les mêmes variables puissent être utilisées pour la requête suivante.
Quel est le moyen optimal et standard de propager des résultats intermédiaires via un middleware?
Comme vous l'avez mentionné, req.locals
, res.locals
Ou même votre propre clé définie res.userData
Peuvent être utilisés. Cependant, lorsque vous utilisez un moteur de vue avec Express, vous pouvez définir des données intermédiaires sur res.locals
Dans votre middleware. Ces données seront disponibles dans votre vue (voir this post ). Il est courant de définir des données intermédiaires à l'intérieur du middleware sur req.locals
Pour éviter de remplacer les données d'affichage dans res.locals
, Bien que cela ne soit pas officiellement documenté.
res.locals Objet contenant des variables locales de réponse étendues à la demande, et donc disponibles uniquement pour la ou les vues rendues au cours de ce cycle de demande/réponse. (si seulement). Sinon, cette propriété est identique à
app.locals
.Cette propriété est utile pour exposer des informations au niveau de la requête, telles que le nom du chemin de la requête, l'utilisateur authentifié, les paramètres utilisateur, etc.