req.locals vs. res.locals vs. res.data vs. req.data vs. app.locals no middleware Express

Existem algumas perguntas semelhantes, mas minha pergunta é que, se eu quiser propagar resultados intermediários, eu entendo os diferentes middlewares de roteamento, qual é a melhor maneira de fazer isso?

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();
}
// ...

Eu acho que posso obter a mesma propagação de dados através do middleware diferente usandoreq.locais. Além disso, parece que os objetos de solicitação e resposta possuem as propriedades locais localizadas em um objeto vazio no início da solicitação.

Além disso, também é possível definir propriedades res.mydata ou req.mydata?

Em teoria, o app.locals também pode ser usado para transmitir esses dados pelos diferentes middlewares, pois eles persistirão nos middlewares, mas isso seria contrário ao uso convencional do app.locals. É usado mais para dados específicos do aplicativo. Também será necessário limpar esses dados no final do ciclo de solicitação-resposta para que as mesmas variáveis possam ser usadas para a próxima solicitação.

Qual é a maneira ideal e padrão de propagar resultados intermediários por meio de middleware?

questionAnswers(1)

yourAnswerToTheQuestion