Rotas e middlewares
Node.js & APIs • Módulo 2: APIs REST • Codding — material para estudo offline
Aluno: ______________________________ Data: ____ / ____ / ______
Nesta aula, você vai compreender Rotas e middlewares com explicação progressiva, exemplo resolvido, checagens e prática. Nada de apenas copiar: cada etapa prepara a próxima.
Objetivos da aula
- Explicar Rotas e middlewares com suas próprias palavras
- Reconhecer as partes importantes em um exemplo real
- Identificar e corrigir os erros mais frequentes
- Aplicar o conteúdo em uma atividade prática
Pré-requisito: Leia a aula anterior do módulo se algum termo parecer novo. Você pode testar o exemplo antes de continuar. • Duração: 50–75 min
Explicação passo a passo
1. O que é Rotas e middlewares
Uma API REST expõe recursos por URL e usa os verbos HTTP para dizer a intenção: GET lê, POST cria, PUT/PATCH atualiza, DELETE remove.
Checkpoint: Qual status indica recurso criado com sucesso? — Resposta: 201
2. Como pensar antes de fazer
O status code é parte do contrato: 200 ok, 201 criado, 400 pedido inválido, 401 não autenticado, 403 sem permissão, 404 não encontrado, 500 erro do servidor. Devolver 200 com {erro: true} quebra qualquer cliente sério.
Dica: Não decore a forma. Tente explicar com suas palavras qual problema “Rotas e middlewares” resolve.
3. Exemplo completo, do início ao resultado
Valide toda entrada no servidor. Validação no navegador é conforto para o usuário; segurança só existe do lado do servidor, porque qualquer um pode chamar o endpoint direto.
// Node + Express
const express = require("express");
const app = express();
app.use(express.json());
const tarefas = [];
app.get("/tarefas", (req, res) => res.json(tarefas));
app.post("/tarefas", (req, res) => {
const { titulo } = req.body;
if (!titulo || titulo.length < 3) {
return res.status(400).json({ erro: "titulo deve ter ao menos 3 caracteres" });
}
const nova = { id: tarefas.length + 1, titulo, feita: false };
tarefas.push(nova);
res.status(201).json(nova); // 201 = criado
});
app.listen(3000);| Trecho | O que faz |
|---|
// Node + Express | Comentário de orientação: documenta a intenção sem executar uma ação. |
const express = require("express"); | Cria ou atualiza um valor que será usado pelo restante do exemplo. |
const app = express(); | Cria ou atualiza um valor que será usado pelo restante do exemplo. |
app.use(express.json()); | Contribui para a transformação principal mostrada neste exemplo. |
const tarefas = []; | Cria ou atualiza um valor que será usado pelo restante do exemplo. |
app.get("/tarefas", (req, res) => res.json(tarefas)); | Contribui para a transformação principal mostrada neste exemplo. |
app.post("/tarefas", (req, res) => { | Contribui para a transformação principal mostrada neste exemplo. |
const { titulo } = req.body; | Cria ou atualiza um valor que será usado pelo restante do exemplo. |
Dica: Validação antes de tocar nos dados e status coerente com o resultado: 400 para entrada ruim, 201 para criação.
Checkpoint: Onde a validação de dados é obrigatória? — Resposta: No servidor
4. Do detalhe para o todo
Autenticação normalmente usa um token (JWT) no cabeçalho Authorization. Autenticação diz quem você é; autorização diz o que você pode — são checagens diferentes e ambas ficam no servidor.
5. Erros comuns e como corrigi-los
1. Sempre responder 200, mesmo em erro.
2. Confiar na validação do front-end.
3. Colocar verbo na URL (/criarUsuario) em vez de usar POST /usuarios.
Dica: Quando algo der errado, compare uma diferença por vez com o exemplo. Evite mudar várias partes ao mesmo tempo.
Prática guiada
1. 1. Faça funcionar
Laboratório de Rotas e middlewares: execute o exemplo, identifique entrada, processamento e saída e altere pelo menos um valor para observar como o resultado muda.
// Node + Express
const express = require("express");
const app = express();
app.use(express.json());
const tarefas = [];
app.get("/tarefas", (req, res) => res.json(tarefas));
app.post("/tarefas", (req, res) => {
const { titulo } = req.body;
if (!titulo || titulo.length < 3) {
return res.status(400).json({ erro: "titulo deve ter ao menos 3 caracteres" });
}
const nova = { id: tarefas.length + 1, titulo, feita: false };
tarefas.push(nova);
res.status(201).json(nova); // 201 = criado
});
app.listen(3000);Dica: Volte ao exemplo resolvido e compare a estrutura. Sempre responder 200, mesmo em erro.
2. 2. Preveja antes de testar
Sem executar, explique qual resultado o exemplo de Rotas e middlewares deve produzir e qual parte é responsável por ele.
Minha previsão:
A parte responsável pelo resultado:
Como vou conferir:
Dica: Use o modelo mental da aula: entrada, transformação e evidência observável.
3. 3. Encontre e corrija o erro
Use o exemplo de Rotas e middlewares, identifique um risco citado na aula e registre ou implemente a correção.
// Node + Express
const express = require("express");
const app = express();
app.use(express.json());
const tarefas = [];
app.get("/tarefas", (req, res) => res.json(tarefas));
app.post("/tarefas", (req, res) => {
const { titulo } = req.body;
if (!titulo || titulo.length < 3) {
return res.status(400).json({ erro: "titulo deve ter ao menos 3 caracteres" });
}
const nova = { id: tarefas.length + 1, titulo, feita: false };
tarefas.push(nova);
res.status(201).json(nova); // 201 = criado
});
app.listen(3000);Dica: Sempre responder 200, mesmo em erro.
4. 4. Aplique em um caso novo
Crie uma variação própria usando Rotas e middlewares. Mude os dados ou o cenário e demonstre que o resultado continua correto.
// Node + Express
const express = require("express");
const app = express();
app.use(express.json());
const tarefas = [];
app.get("/tarefas", (req, res) => res.json(tarefas));
app.post("/tarefas", (req, res) => {
const { titulo } = req.body;
if (!titulo || titulo.length < 3) {
return res.status(400).json({ erro: "titulo deve ter ao menos 3 caracteres" });
}
const nova = { id: tarefas.length + 1, titulo, feita: false };
tarefas.push(nova);
res.status(201).json(nova); // 201 = criado
});
app.listen(3000);Dica: Mantenha a estrutura que já funcionou e altere uma decisão por vez.
Revisão
- Uma API REST expõe recursos por URL e usa os verbos HTTP para dizer a intenção: GET lê, POST cria, PUT/PATCH atualiza, DELETE remove.
- Validação antes de tocar nos dados e status coerente com o resultado: 400 para entrada ruim, 201 para criação.
- Evite: Sempre responder 200, mesmo em erro.
- Evite: Confiar na validação do front-end.
Exemplo comentado
// Node + Express
const express = require("express");
const app = express();
app.use(express.json());
const tarefas = [];
app.get("/tarefas", (req, res) => res.json(tarefas));
app.post("/tarefas", (req, res) => {
const { titulo } = req.body;
if (!titulo || titulo.length < 3) {
return res.status(400).json({ erro: "titulo deve ter ao menos 3 caracteres" });
}
const nova = { id: tarefas.length + 1, titulo, feita: false };
tarefas.push(nova);
res.status(201).json(nova); // 201 = criado
});
app.listen(3000);Validação antes de tocar nos dados e status coerente com o resultado: 400 para entrada ruim, 201 para criação.
Erros comuns
- Sempre responder 200, mesmo em erro.
- Confiar na validação do front-end.
- Colocar verbo na URL (/criarUsuario) em vez de usar POST /usuarios.
Quiz e gabarito completo
1. Qual status indica recurso criado com sucesso?
Gabarito: b) 201 — 201 Created é a resposta canônica de um POST bem-sucedido.
2. Onde a validação de dados é obrigatória?
- a) No navegador
- b) No servidor
- c) No banco apenas
- d) Em nenhum lugar se usar HTTPS
Gabarito: b) No servidor — O cliente pode ser burlado; o servidor é a fronteira real.
Codding • Node.js & APIs • Rotas e middlewares • Prova final e certificado em codding.lovable.app/cursos/nodejs/prova