🚀 Capítulo 12: Middleware: O Guarda da Fronteira (Tema: Game of Thrones)
NOTE
Este capítulo utiliza a temática de Game of Thrones para explicar os Middlewares. Na Muralha, ninguém passa para o sul sem ser revistado pela Patrulha da Noite!
1. 🎯 Objetivo da Aula
Compreender o conceito de Middleware no Express, como ele intercepta requisições e como criar funções personalizadas que rodam antes da rota final.
2. 🏢 O Cenário Prático (Seu Desafio)
Você é o Comandante da Patrulha da Noite na Muralha. O Rei do Norte (o cliente) envia mensagens para o sul. Mas antes que a mensagem chegue ao destino final (a rota), ela precisa passar pela Muralha (o Middleware). Você precisa criar um guarda que:
- Anote no livro de registros que uma mensagem passou (Log).
- Verifique se quem está enviando não é um Caminhante Branco (Bloqueio/Segurança).
Seu desafio é criar esse guarda no Express!
3. 🧠 Fundamentos: A Teoria Traduzida
Um Middleware é uma função que tem acesso aos objetos de solicitação (req), resposta (res) e à próxima função de middleware no ciclo de solicitação-resposta do aplicativo.
🛡️ O que ele pode fazer?
- Executar qualquer código.
- Fazer mudanças nos objetos
reqeres. - Encerrar o ciclo de solicitação-resposta (barrar a requisição).
- Chamar o próximo middleware na pilha usando
next().
Se o middleware atual não encerrar o ciclo, ele deve chamar next() para passar o controle para a próxima função. Caso contrário, a solicitação ficará travada!
4. 📖 Exemplo Guiado: O Guarda de Log
Aqui está como criar um middleware que mostra no console toda vez que alguém acessa o servidor:
const express = require('express');
const app = express();
// O nosso Middleware (O Guarda)
const guardaDaMuralha = (req, res, next) => {
console.log(`[LOG] Alguém acessou o caminho: ${req.url}`);
next(); // Permite que a pessoa passe para a rota!
};
// Avisa o Express para usar esse guarda em TODAS as rotas
app.use(guardaDaMuralha);
app.get('/sul', (req, res) => {
res.send('Você chegou ao Sul com segurança.');
});
app.listen(3000);5. 🛠️ Prática Obrigatória 1: O Guarda Barrador
Modifique o middleware guardaDaMuralha para que ele não deixe ninguém passar.
- Remova a chamada
next(). - Faça ele responder direto com
res.status(403).send("Acesso proibido pela Patrulha da Noite!");. - Escreva apenas o código do novo middleware.
6. 🛠️ Prática Obrigatória 2: O Esquecimento do next()
O que acontece com o navegador do usuário se o seu middleware não chamar a função next() e também não enviar nenhuma resposta de volta?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 12 Backend) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
mod_07_backend_e_apis/
├── capitulos/
│ ├── capitulo_12_middleware.md
│ └── codigos/
│ └── cap12/
│ └── guarda_muralha.js9. 💡 Checkpoint de Lógica
O comando app.use(express.json()) que usamos nos capítulos anteriores é um Middleware? O que ele faz com a requisição antes dela chegar na rota?
10. 🔥 Desafio de Fixação
Crie um middleware que verifique se a requisição veio com um cabeçalho (Header) específico e, se não vier, barre o acesso.
11. 🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
const guardaDaMuralha = (req, res, next) => {
res.status(403).send("Acesso proibido pela Patrulha da Noite!");
// Sem o next(), ninguém passa!
};