Jest kilka podobnych pytań, ale moje pytanie brzmi: jeśli chcę rozpowszechniać wyniki pośrednie, które otrzymuję za pomocą różnych programów pośredniczących do routingu, jaki jest najlepszy sposób, aby to zrobić?
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();
}
// ...
Myślę, że mogę uzyskać taką samą propagację danych przez różne oprogramowanie pośredniczące, używając req .locals. Wygląda również na to, że zarówno obiekty żądania, jak i odpowiedzi mają właściwości lokalne zainicjowane w pustym obiekcie na początku żądania.
Można też ustawić właściwości res.mydata lub req.mydata?
Teoretycznie app.locals może być również używany do przekazywania tych danych przez różne oprogramowanie pośredniczące, ponieważ będzie istnieć w oprogramowaniu pośrednim, ale byłoby to sprzeczne z konwencjonalnym użyciem app.locals. Jest używany bardziej do danych specyficznych dla aplikacji. Konieczne będzie również wyczyszczenie tych danych na końcu cyklu żądanie-odpowiedź, aby te same zmienne mogły zostać użyte w następnym żądaniu.
Jaki jest optymalny i standardowy sposób rozpowszechniania wyników pośrednich za pomocą oprogramowania pośredniego?
źródło
res.render()
ma pierwszeństwo przedres.locals
. Więc ktoś mógł przypadkowo nadpisać zmienną w ten sposóbres.locals = { name: 'Jake' } // later in code... res.render('user.template', { name: 'Tony' }, (err, html) => {}) // the 'name' variable is now 'Tony'