Es werden einige ähnliche Fragen gestellt, aber meine Frage lautet: Wenn ich Zwischenergebnisse verbreiten möchte, die ich mit der verschiedenen Routing-Middleware verstehe, wie kann ich das am besten tun?
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();
}
// ...
Ich denke, dass ich mit req .locals die gleiche Datenverbreitung durch die verschiedenen Middleware- Programme erzielen kann. Es scheint auch, dass sowohl die Anforderungs- als auch die Antwortobjekte die lokalen Eigenschaften haben, die zu Beginn der Anforderung mit einem leeren Objekt initialisiert wurden.
Auch kann man res.mydata oder req.mydata Eigenschaften auch setzen?
Theoretisch können app.locals auch verwendet werden, um diese Daten durch die verschiedenen Middleware weiterzuleiten, da sie über Middleware hinweg bestehen bleiben. Dies würde jedoch der herkömmlichen Verwendung von app.locals widersprechen. Es wird eher für anwendungsspezifische Daten verwendet. Es ist auch erforderlich, diese Daten am Ende des Anforderungs-Antwort-Zyklus zu löschen, damit dieselben Variablen für die nächste Anforderung verwendet werden können.
Was ist der optimale und standardmäßige Weg, um Zwischenergebnisse durch Middleware zu verbreiten?
quelle
res.render()
Vorrang vorres.locals
. So könnte jemand versehentlich die Variable wieres.locals = { name: 'Jake' } // later in code... res.render('user.template', { name: 'Tony' }, (err, html) => {}) // the 'name' variable is now 'Tony'