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.
