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 para application/json.
  • O método res.send() detecta o tipo de conteúdo e define o header Content-Type adequado (como text/html para 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}`);
});