🚀 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:

  1. Anote no livro de registros que uma mensagem passou (Log).
  2. 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 req e res.
  • 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)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 12 Backend) e clique em Commit to main.
  2. 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.js

9. 💡 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!
};

Capitulo Anterior | Proximo Capitulo