Leodario.com

Leodario.com – Tudo sobre Tecnologia

Aula 31 – API JavaScript, Node.js e Express – Middleware Concept – req, res, next explicado

Imagem destacada da aula de API

Introdução (3 min)

Imagine um porteiro em um prédio. Ele verifica se você tem permissão para entrar (autenticação), se pode acessar o andar específico (autorização) e registra sua entrada (logging). Em uma API, o middleware funciona como esse porteiro, executando tarefas importantes antes que a requisição chegue ao seu destino final.

Este conceito é vital para APIs modernas, pois permite adicionar funcionalidades transversais, como segurança, logging e validação de dados, sem replicar código em cada rota. Nesta aula, você entenderá o que é middleware, como funciona e como implementá-lo em Node.js com Express.

Dentro do ecossistema Node.js/Express, middlewares são funções que têm acesso aos objetos de requisição (req), resposta (res) e à próxima função middleware na pilha (next).

Conceito Fundamental (7 min)

Middleware, em termos técnicos, é uma função que intercepta requisições HTTP em uma aplicação. Ele recebe os objetos req (requisição), res (resposta) e next (próxima função). A função req contém informações sobre a solicitação do cliente, como cabeçalhos, corpo e URL. A função res permite enviar a resposta de volta ao cliente. A função next é fundamental; chamá-la passa a execução para o próximo middleware na cadeia, ou para o handler da rota, se for o último middleware.

Em produção, middlewares são usados para autenticação (verificar a identidade do usuário), autorização (verificar as permissões do usuário), logging (registrar as atividades da API), tratamento de erros, compressão de dados e muito mais. Eles se integram com diversas tecnologias, como bancos de dados, caches e serviços externos.

A principal vantagem dos middlewares é a reutilização de código e a organização da aplicação. Como desvantagem, um middleware mal implementado pode afetar o desempenho da API.

Implementação Prática (10 min)

const express = require('express');
const app = express();

// Middleware para registrar o timestamp de cada requisição const requestLogger = (req, res, next) => { console.log(Requisição recebida em: ${new Date()}); next(); // Passa para o próximo middleware ou handler };

// Middleware para verificar se o usuário está autenticado (exemplo simplificado) const authMiddleware = (req, res, next) => { const isAuthenticated = true; // Substitua por lógica de autenticação real if (isAuthenticated) { next(); } else { res.status(401).send('Não autorizado'); } };

// Rota que utiliza os middlewares app.get('/protected', requestLogger, authMiddleware, (req, res) => { res.send('Conteúdo protegido!'); });

// Rota que utiliza apenas o requestLogger app.get('/public', requestLogger, (req, res) => { res.send('Conteúdo público!'); });

// Middleware de tratamento de erros (SEMPRE no final) app.use((err, req, res, next) => { console.error(err.stack); res.status(500).send('Erro interno do servidor!'); });

app.listen(3000, () => console.log('Servidor rodando na porta 3000'));

Este código demonstra dois middlewares: requestLogger registra o horário da requisição e authMiddleware simula uma autenticação. Note o uso de next() para passar a execução adiante. O middleware de erro captura e lida com exceções não tratadas. Este código é compatível com HostGator Plano M e segue boas práticas. Para testes, acesse /protected e /public no seu navegador.

Exercício Hands-On (5 min)

Crie um middleware que registra o método HTTP (GET, POST, etc.) da requisição no console. Utilize-o em uma nova rota /metodos.

Solução:

const methodLogger = (req, res, next) => {
  console.log(Método HTTP: ${req.method});
  next();
};

app.get('/metodos', methodLogger, (req, res) => { res.send('Método registrado!'); });

Para testar, faça uma requisição GET para /metodos. O console exibirá o método utilizado. Para solucionar erros, verifique a sintaxe e a ordem dos middlewares.

Próximos passos: Explore middlewares de terceiros para funcionalidades como CORS, rate limiting e body parsing.

🚀 Pronto para a próxima aula?

Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!

📚 Ver todas as aulas