🚀 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?
- O usuário tentou acessar
meusite.com/pagina-que-nao-existe. - O usuário tentou se cadastrar sem preencher o campo obrigatório de e-mail.
- 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
- 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/catchna sua rota do Express?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 09 FS_MundoInvertido) e clique em Commit to main. - 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:
- 404 (Não encontrado).
- 400 (Requisição ruim/dados inválidos).
- 200 (Sucesso). Gabarito da Prática 2:
- 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”.