Integração de Express com MongoDB

A integração do Express.js com o MongoDB usando Mongoose segue um fluxo robusto para aplicações Node.js, permitindo a definição de modelos, validação e acesso fácil à base de dados NoSQL.

Estrutura do Projeto

Crie um novo diretório e inicialize o projeto:

mkdir express-mongoose-tutorial

cd express-mongoose-tutorial

npm init -y

Instale as dependências:

npm install express mongoose

Conectar o Express ao MongoDB com Mongoose

Crie um ficheiro app.js e adicione o seguinte código para configurar o servidor Express e conectar ao MongoDB local:

const express = require('express');
const mongoose = require('mongoose');

const app = express();
app.use(express.json());

mongoose.connect('mongodb://localhost:27017/exemplodb', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
})
  .then(() => console.log('Banco de dados conectado com sucesso!'))
  .catch(err => console.error('Erro ao conectar ao MongoDB:', err));

Isso conecta a sua aplicação a uma base de dados exemplodb executando localmente.

Definir um Modelo Mongoose

Ainda no app.js (ou em models/User.js para projetos maiores):

const UserSchema = new mongoose.Schema({
  nome: { type: String, required: true },
  idade: { type: Number, required: true }
});

const User = mongoose.model('User', UserSchema);

Este schema define um utilizador com os campos nome e idade obrigatórios.

Rotas e Operações CRUD

Adicione rotas ao seu servidor para manipular utilizadores:

// Criar utilizador
app.post('/users', async (req, res) => {
  try {
    const user = new User(req.body);
    await user.save();
    res.status(201).json(user);
  } catch (err) {
    res.status(400).json({ erro: err.message });
  }
});

// Listar todos utilizadores
app.get('/users', async (req, res) => {
  try {
    const users = await User.find();
    res.json(users);
  } catch (err) {
    res.status(500).json({ erro: err.message });
  }
});

// Obter utilizador pelo ID
app.get('/users/:id', async (req, res) => {
  try {
    const user = await User.findById(req.params.id);
    if (!user) return res.status(404).json({ erro: 'Utilizador não encontrado' });
    res.json(user);
  } catch (err) {
    res.status(500).json({ erro: err.message });
  }
});

// Atualizar utilizador
app.put('/users/:id', async (req, res) => {
  try {
    const user = await User.findByIdAndUpdate(req.params.id, req.body, { new: true, runValidators: true });
    if (!user) return res.status(404).json({ erro: 'Utilizador não encontrado' });
    res.json(user);
  } catch (err) {
    res.status(400).json({ erro: err.message });
  }
});

// Eliminar utilizador
app.delete('/users/:id', async (req, res) => {
  try {
    const user = await User.findByIdAndDelete(req.params.id);
    if (!user) return res.status(404).json({ erro: 'Utilizador não encontrado' });
    res.json({ mensagem: 'Utilizador eliminado' });
  } catch (err) {
    res.status(500).json({ erro: err.message });
  }
});

Inicie o servidor:

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Servidor rodando na porta ${PORT}`);
});

Testar a API

Use Postman, Insomnia ou curl para enviar requests HTTP para os endpoints /users e testar a criação, leitura, atualização ou remoção de usuários no MongoDB.

Resumo das Etapas

  • Instalação de dependências (Express/Mongoose)
  • Definição e conexão ao MongoDB
  • Criação de schema/modelo com Mongoose
  • Implementação de rotas RESTful (CRUD)
  • Testes via ferramentas de API

Essa integração é base para aplicações modernas com Node.js, sendo possível evoluir para autenticação, validação avançada e uso em ambientes de produção.