Есть несколько похожих вопросов, но мой вопрос в том, что если я хочу распространить промежуточные результаты, полученные с помощью другого промежуточного программного обеспечения маршрутизации, как лучше всего это сделать?
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();
}
// ...
Я думаю, что могу добиться такого же распространения данных через другое промежуточное ПО, используя req .locals. Кроме того, похоже, что оба объекта запроса и ответа имеют свойства locals, инициализированные пустым объектом в начале запроса.
Кроме того, можно также установить свойства res.mydata или req.mydata?
Теоретически app.locals также можно использовать для передачи этих данных через различное промежуточное программное обеспечение, поскольку они будут сохраняться в промежуточном программном обеспечении, но это будет противоречить обычному использованию app.locals. Он больше используется для конкретных данных приложения. Также необходимо будет очистить эти данные в конце цикла запрос-ответ, чтобы те же переменные можно было использовать для следующего запроса.
Каков оптимальный и стандартный способ распространения промежуточных результатов через промежуточное ПО?
источник
res.render()
иметь приоритетres.locals
. Так что кто-то мог случайно перезаписать переменную вот такres.locals = { name: 'Jake' } // later in code... res.render('user.template', { name: 'Tony' }, (err, html) => {}) // the 'name' variable is now 'Tony'