Rotas
1. Configuração Inicial do Projeto
Instale o Express e crie um arquivo app.js:
npm init -y
npm install express
No app.js:
const express = require('express');
const app = express();
const port = 3000;
// Middleware para habilitar leitura de requisições JSON
app.use(express.json());
app.listen(port, () => {
console.log(`Servidor rodando em http://localhost:${port}`);
});
2. Criação de Rotas Básicas GET, POST, PUT, DELETE
// Rota GET - retorna mensagem simples
app.get('/', (req, res) => {
res.send('GET: Página inicial');
});
// Rota POST - recebe dados e responde confirmando
app.post('/dados', (req, res) => {
const dadosRecebidos = req.body;
res.json({ mensagem: 'POST: Dados recebidos com sucesso', dados: dadosRecebidos });
});
// Rota PUT - atualiza dado (exemplo simples)
app.put('/dados/:id', (req, res) => {
const id = req.params.id;
const dadosAtualizados = req.body;
res.json({ mensagem: `PUT: Dados do id ${id} atualizados`, dados: dadosAtualizados });
});
// Rota DELETE - exclui dados pelo id
app.delete('/dados/:id', (req, res) => {
const id = req.params.id;
res.json({ mensagem: `DELETE: Dados do id ${id} excluídos` });
});
3. Parâmetros em Rotas
- Parâmetros na URL são capturados via
req.params. - Parâmetros de query string via
req.query.
Exemplos:
// Rota com parâmetro obrigatório
app.get('/utilizador/:id', (req, res) => {
const id = req.params.id;
res.send(`Utilizador solicitado: ${id}`);
});
// Rota com parâmetros opcionais na query string
app.get('/busca', (req, res) => {
const filtro = req.query.filtro || 'nenhum filtro';
res.send(`Busca realizada com filtro: ${filtro}`);
});
4. Envio de Respostas JSON e HTML
Para enviar respostas JSON e HTML em rotas Express.js, usa-se métodos do objeto de resposta (res) específicos para cada tipo de dado:
Enviar resposta JSON
Use o método res.json() para enviar um objeto JSON estruturado ao cliente. Exemplo:
app.get('/api/dados', (req, res) => {
res.json({ mensagem: 'Resposta em JSON', status: 'sucesso' });
});
Assim, quem acessar essa rota receberá dados no formato JSON de forma simples e direta.
Enviar resposta HTML
Use o método res.send() para enviar conteúdo HTML em formato string. Exemplo:
app.get('/pagina', (req, res) => {
res.send('<h1>Bem-vindo!</h1><p>Esta é uma página HTML simples.</p>');
});
Neste caso, o navegador exibirá corretamente o conteúdo HTML enviado.
Dicas importantes
- Para enviar ficheiros HTML inteiros (não só strings), use
res.sendFile()com o caminho do ficheiro. - Certifique-se de que o Express está habilitado para interpretar JSON no corpo das requisições usando
app.use(express.json())para APIs que recebem JSON no corpo. - O método
res.json()automaticamente define o content-type da resposta paraapplication/json. - O método
res.send()detecta o tipo de conteúdo e define o headerContent-Typeadequado (comotext/htmlpara strings HTML).
Exemplo simples combinando ambos
const express = require('express');
const app = express();
const port = 3000;
app.use(express.json());
app.get('/json', (req, res) => {
res.json({ mensagem: 'Esta é uma resposta JSON', sucesso: true });
});
app.get('/html', (req, res) => {
res.send('<h1>Conteúdo HTML enviado pelo Express</h1>');
});
app.listen(port, () => {
console.log(`Servidor rodando em http://localhost:${port}`);
});
Este exemplo cria duas rotas: uma retornando JSON e outra HTML.
Desta forma, o Express facilita o envio de diferentes tipos de conteúdo, sendo muito utilizado para APIs REST (JSON) e geração de páginas dinâmicas (HTML).
5. Organização das Rotas com express.Router()
Para modularizar e organizar rotas, use o Router:
const router = express.Router();
// Definir uma rota no router
router.get('/sobre', (req, res) => {
res.send('Página Sobre');
});
// Usar o router na aplicação principal
app.use('/info', router);
Assim, a rota completa será /info/sobre.
6. Exemplo Completo Aplicação Express.js
const express = require('express');
const app = express();
const port = 3000;
app.use(express.json());
// GET simples
app.get('/', (req, res) => {
res.send('GET: Página inicial');
});
// POST recebendo JSON
app.post('/dados', (req, res) => {
res.json({ mensagem: 'POST recebido', dados: req.body });
});
// PUT para atualizar dado específico via parâmetro
app.put('/dados/:id', (req, res) => {
res.json({ mensagem: `PUT id ${req.params.id}`, dadosAtualizados: req.body });
});
// DELETE para excluir dado via parâmetro
app.delete('/dados/:id', (req, res) => {
res.json({ mensagem: `DELETE id ${req.params.id}` });
});
// Parâmetro na url
app.get('/usuario/:id', (req, res) => {
res.send(`Usuário id: ${req.params.id}`);
});
// Query string
app.get('/busca', (req, res) => {
res.send(`Filtro da busca: ${req.query.filtro || 'nenhum'}`);
});
// Resposta JSON
app.get('/json', (req, res) => {
res.json({ mensagem: 'Resposta JSON' });
});
// Resposta HTML
app.get('/html', (req, res) => {
res.send('<h1>Resposta em HTML</h1>');
});
// Router para modularizar
const infoRouter = express.Router();
infoRouter.get('/sobre', (req, res) => {
res.send('Página Sobre via Router');
});
app.use('/info', infoRouter);
app.listen(port, () => {
console.log(`Servidor rodando em http://localhost:${port}`);
});
