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
requestTime
para interceptar todas as requisições com endereço/