🚀 Capítulo 09: O Mundo Invertido (Tema: Stranger Things)

NOTE

Este capítulo utiliza a temática de Stranger Things para explicar o tratamento de erros. Não deixe os monstros do código travarem o seu servidor!


1. 🎯 Objetivo da Aula

Aprender a lidar com erros no Backend usando os blocos try/catch e compreender os principais Códigos de Status HTTP para enviar respostas claras ao usuário.

2. 🏢 O Cenário Prático (Seu Desafio)

Na série Stranger Things, a cidade de Hawkins está conectada ao “Mundo Invertido”, um lugar sombrio, perigoso e cheio de monstros (como o Demogorgon). Se o portal for aberto e ninguém tomar cuidado, os monstros invadem a nossa realidade e destroem tudo! Os personagens precisam estar sempre prontos para capturar e conter essas ameaças antes que elas façam o caos.

No desenvolvimento Backend, o “Mundo Invertido” são os Erros de Código!

  • Se o banco de dados cair, se o usuário mandar dados errados ou se houver um bug, um “monstro” nasce no seu código.
  • Se você não souber capturar esse monstro, o seu servidor simplesmente trava e sai do ar (a aplicação morre!). Seu desafio é conter os monstros!

🧠 Fundamentos: A Teoria Traduzida

🛡️ 1. O Bloco Try / Catch (Tente / Capture):

É a nossa armadilha para monstros no JavaScript! Nós usamos essa estrutura para envolver códigos que podem dar erro:

  • Try (Tente): Você coloca o código normal que quer executar.
  • Catch (Capture): Se der qualquer erro dentro do Try, o JavaScript não deixa o servidor cair! Ele pula direto para o Catch, onde você pode tratar o erro e avisar o usuário.
try {
    // Tenta rodar esse código
    let resultado = dividirCurasPorZero(); 
} catch (erro) {
    // Se deu erro, cai aqui e o servidor continua vivo!
    console.log("Capturamos um monstro: " + erro.message);
}

🚦 2. Códigos de Status HTTP:

Quando o servidor responde ao frontend, ele deve enviar um código numérico dizendo o que aconteceu. Os mais famosos são:

  • 200 (OK): Deu tudo certo! Aqui estão os dados.
  • 400 (Bad Request): Erro do usuário. Ele mandou dados errados ou incompletos.
  • 404 (Not Found): A página ou recurso que você pediu não existe.
  • 500 (Internal Server Error): Deu um “Demogorgon” no servidor! O erro foi do nosso código.

4. 📖 Exemplo Guiado: Rota Segura com Try/Catch

Veja como proteger uma rota no Express:

app.get('/buscar-usuario', async (req, res) => {
    try {
        let usuario = await buscarNoBanco(); // Pode falhar!
        res.status(200).json(usuario);
    } catch (demogorgon) {
        // Captura o erro e avisa o frontend sem travar o app
        res.status(500).json({ mensagem: "Erro interno no Mundo Invertido!" });
    }
});

5. 🛠️ Prática Obrigatória 1: Escolhendo o Código de Status

Qual código de status HTTP ( ou ) você deve retornar nas seguintes situações?

  1. O usuário tentou acessar meusite.com/pagina-que-nao-existe.
  2. O usuário tentou se cadastrar sem preencher o campo obrigatório de e-mail.
  3. O usuário conseguiu fazer login com sucesso e os dados dele estão sendo enviados.

6. 🛠️ Prática Obrigatória 2: O Poder do Catch

  1. O que aconteceria com o seu aplicativo se houvesse um erro de conexão com o banco de dados e você não estivesse usando o bloco try/catch na sua rota do Express?

7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 09 FS_MundoInvertido) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

proj_aplicacoes_full_stack/
├── capitulos/
│   └── capitulo_09_mundo_invertido.md

💡 Checkpoint de Lógica

Nunca retorne mensagens de erro técnico muito detalhadas (como a linha exata onde o código quebrou) para o usuário final. Isso pode dar pistas para hackers sobre como invadir o seu sistema!

10. 🔥 Desafio de Fixação

Tente criar uma função que force um erro de propósito (como tentar ler uma variável que não existe) e capture esse erro usando try/catch.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. 404 (Não encontrado).
  2. 400 (Requisição ruim/dados inválidos).
  3. 200 (Sucesso). Gabarito da Prática 2:
  4. O servidor Node.js simplesmente iria parar de funcionar e fecharia sozinho! Qualquer usuário que tentasse acessar o site depois disso veria uma tela de erro de conexão, pois o backend estaria “morto”.

Capitulo Anterior | Proximo Capitulo