Introdução a middlewares
Citação
“Um aplicativo do Express é essencialmente uma série de chamadas de funções de middleware.” - ExpressJS
Funções middlewares possuem acesso aos dados presentes na requisição (request) e na resposta (response).
Além disso, essas funções também possuem uma referência para a próxima função middleware na pilha de execução.
Funcionalidades das funções de middleware:
- Executar códigos
 - Fazer mudanças nos dados da solicitação e resposta
 - Encerrar o ciclo de request-response
 - Executar o próximo middleware na pilha
 
É fundamental registrar o middleware com app.use(middleware) para que o Express possa usá-lo para interceptar as requisições necessárias.
Observação
Se o atual middleware não for responsável por encerrar o ciclo de request-response, é necessário definir dentro dela a referência para o próximo middleware (
next()). Se não a requisição ficará suspensa e provocando umtimeout error.
// Requisição fica suspensa e lança "TimeOutError"
const app = express();
 
app.get("/", function (req, res, next) {
  // ...
});// Middleware encerra ciclo
const app = express();
 
app.get("/", function (req, res, next) {
  // ...
  res.send(); // encerra o ciclo de request-response
});// Middleware chama o próximo middleware da pilha
const app = express();
 
app.get("/", function (req, res, next) {
  // ...
  next();
});Exemplo
Observação
Em aplicações que possuem muitos middlewares, é comum criar um diretório
middleware/para centralizar todos eles.
const app = express();
 
var requestTime = function (req, res, next) {
  req.requestTime = Date.now();
  next();
};
 
app.use(requestTime);
 
app.get("/", function (req, res) {
  var responseText = "Hello World!";
  responseText += "Requested at: " + req.requestTime;
  res.send(responseText);
});
 
app.listen(3000);Nota
O Express utilizará a função middleware
requestTimepara interceptar todas as requisições com endereço/