Um dos conceitos fundamentais no desenvolvimento de aplicações web é o CRUD (Create, Read, Update, Delete). Esses são os quatro tipos básicos de funcionalidades que a maioria dos sistemas web precisa realizar em algum momento. Neste capítulo, aprenderemos como implementar operações CRUD usando NodeJS e MongoDB, com foco especial no tratamento de erros.
Criando um CRUD com NodeJS e MongoDB
Para começar, precisamos de uma instância do MongoDB em execução e uma aplicação NodeJS configurada. Vamos supor que já temos uma coleção de usuários em nosso banco de dados MongoDB. Nosso objetivo é criar rotas para adicionar um novo usuário, ler usuários existentes, atualizar um usuário e deletar um usuário.
Criando um novo usuário (Create)
Para criar um novo usuário, precisamos de uma rota POST. No NodeJS, isso pode ser feito usando o pacote express. Primeiro, importamos o express e o inicializamos. Em seguida, definimos uma rota POST que aceita os dados do usuário como JSON no corpo da requisição. Usamos o método insertOne do MongoDB para adicionar o novo usuário à nossa coleção.
const express = require('express');
const app = express();
app.use(express.json());
app.post('/users', (req, res) => {
const newUser = req.body;
db.collection('users').insertOne(newUser, (err, result) => {
if (err) {
res.status(500).send({ error: 'An error occurred while creating the user' });
} else {
res.status(201).send(result.ops[0]);
}
});
});
Lendo usuários existentes (Read)
Para ler usuários existentes, precisamos de uma rota GET. Nós definimos essa rota e usamos o método find do MongoDB para obter todos os usuários de nossa coleção. O método toArray converte o resultado em um array para facilitar o manuseio.
app.get('/users', (req, res) => {
db.collection('users').find({}).toArray((err, users) => {
if (err) {
res.status(500).send({ error: 'An error occurred while fetching users' });
} else {
res.send(users);
}
});
});
Atualizando um usuário (Update)
Para atualizar um usuário, precisamos de uma rota PUT. Essa rota deve incluir o ID do usuário que queremos atualizar. Usamos o método findOneAndUpdate do MongoDB para atualizar o usuário. Especificamos o ID do usuário como nosso critério de busca e passamos os novos dados do usuário.
app.put('/users/:id', (req, res) => {
const userId = req.params.id;
const newUserData = req.body;
db.collection('users').findOneAndUpdate({ _id: ObjectId(userId) }, { $set: newUserData }, (err, result) => {
if (err) {
res.status(500).send({ error: 'An error occurred while updating the user' });
} else {
res.send(result.value);
}
});
});
Deletando um usuário (Delete)
Para deletar um usuário, precisamos de uma rota DELETE. Essa rota também deve incluir o ID do usuário que queremos deletar. Usamos o método findOneAndDelete do MongoDB para deletar o usuário.
app.delete('/users/:id', (req, res) => {
const userId = req.params.id;
db.collection('users').findOneAndDelete({ _id: ObjectId(userId) }, (err, result) => {
if (err) {
res.status(500).send({ error: 'An error occurred while deleting the user' });
} else {
res.send(result.value);
}
});
});
Tratamento de erros
O tratamento de erros é uma parte crucial do desenvolvimento de qualquer aplicação. Em todas as nossas rotas, verificamos se ocorreu um erro durante a operação do banco de dados. Se ocorreu um erro, respondemos com um status HTTP 500 e uma mensagem de erro. Isso permite que o cliente saiba que algo deu errado.
Em um ambiente de produção, você também deve considerar o registro de erros. Isso pode ser feito usando um pacote como o winston ou o morgan. Esses pacotes permitem que você registre automaticamente informações sobre erros e outras informações úteis.
Em resumo, o CRUD é um conceito fundamental no desenvolvimento de aplicações web. Com NodeJS e MongoDB, podemos implementar operações CRUD de maneira eficiente e fácil. O tratamento de erros é uma parte crucial disso, pois nos permite lidar com situações inesperadas de maneira elegante.