O que são middlewares no Express.js e como usá-los?
No Express.js, os middlewares são funções que podem interceptar e modificar requisições e respostas antes que elas cheguem ao manipulador final da rota. Eles são essenciais para implementar autenticação, logging, manipulação de erros e muito mais.
Como funciona um middleware?
Um middleware recebe três parâmetros: req
(requisição), res
(resposta) e next
(função para passar a requisição adiante).
const express = require('express');
const app = express();
const meuMiddleware = (req, res, next) => {
console.log('Middleware executado!');
next(); // Passa a requisição para o próximo middleware ou rota
};
app.use(meuMiddleware);
app.get('/', (req, res) => {
res.send('Rota principal');
});
app.listen(3000, () => console.log('Servidor rodando na porta 3000'));
Tipos de middlewares no Express.js
- Middlewares de aplicação: Aplicados a todas as requisições usando
app.use()
. - Middlewares de rota: Aplicados a rotas específicas.
- Middlewares embutidos: Como
express.json()
para processar JSON. - Middlewares de erro: Tratam erros na aplicação.
Exemplo de middleware para autenticação
const autenticar = (req, res, next) => {
const token = req.headers['authorization'];
if (!token) {
return res.status(401).json({ erro: 'Acesso negado' });
}
next();
};
app.get('/protegido', autenticar, (req, res) => {
res.json({ mensagem: 'Rota protegida acessada!' });
});
Tratamento de erros com middlewares
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ erro: 'Erro interno do servidor' });
});
Conclusão
Os middlewares no Express.js são fundamentais para estruturar uma API robusta, facilitando autenticação, manipulação de requisições e tratamento de erros. Usá-los corretamente melhora a organização e segurança do código.
Por que middlewares são essenciais no Express.js?
O conceito de middlewares no Express.js revolucionou a maneira como APIs são estruturadas. Em vez de escrever código repetitivo em cada rota, podemos centralizar funcionalidades como autenticação, logs e compressão de dados em middlewares reutilizáveis.
Grandes frameworks como NestJS e AdonisJS se inspiram fortemente nessa abordagem. A separação lógica promovida pelos middlewares permite a criação de APIs escaláveis, modulares e mais fáceis de manter.
Algumas aplicações:
- Autenticação e autorização
- Registro de logs de requisições
- Compressão de respostas
- Manipulação de erros
- Filtragem e validação de dados
Dicas para quem está começando
- Use
app.use()
para middlewares globais. - Os middlewares devem sempre chamar
next()
para não bloquear a requisição. - Para middlewares de erro, defina quatro parâmetros
(err, req, res, next)
. - Utilize
express.json()
para permitir envio de dados no formato JSON. - Teste seus middlewares em rotas antes de aplicá-los globalmente.

Henrique Almeida
Especialista em desenvolvimento backend usando Node.js e arquiteturas de microsserviços.
Mais sobre o autor