Tutorial Node.js + MongoDB criando um CRUD.

Neste artigo, vamos ver o básico da utilização do MongoDB. Vamos criar uma API REST com o Node.js, realizando um CRUD (create, read, update e delete) completo. O MongoDB é um banco de dados distribuído, baseado em documentos. Ele é um banco de dados do tipo NoSQL, este tipo de banco de dados, não possui relacionamento entre suas tabelas. Diferente por exemplo de um banco como o MySQL, onde existe o relacionamento entre os dados.

Instalando o MongoDB

Vamos começar realizando a instalação do MongoDB. Neste tutorial estou utilizando o Linux, veja no site oficial como realizar a instalação em outros sistemas operacionais. Acesse o terminal Linux e utilize os seguintes comandos para instalação.

sudo apt update

sudo apt install -y mongodb

Após instalar verifique o status do mongo com o comando.

sudo systemctl status mongodb

Comandos básicos MongoDB

Depois de realizar a instalação do mongodb, pelo terminal Linux utilize o comando abaixo para acessar o terminal do MongoDB.

mongo

Para listar os bancos de dados disponíveis utilize o comando.

show dbs;

Para acessar ou criar um novo banco de dados, utilize o comando.

use app;

Substitua o app pelo nome que deseja para seu banco de dados. Após isto, se utilizarmos novamente o comando: show dbs; para listar os bancos de dados, vamos notar que nosso banco não aparece na listagem. Isto é devido ao banco só realmente ser criado, quando é inserido o primeiro documento no mesmo.

Vamos utilizar o comando abaixo, para criarmos e inserir dados em nossa primeira collection, que é o equivalente a uma tabela no MySQL.

db.test.insertOne({"cod": "1", "test":  "Primeiro Json para teste"})

Substitua o test pelo nome que deseja para sua collection. No MongoDB, os dados são inseridos e manipulados utilizando o formato JSON. Agora para visualizar os dados inseridos em nossa collection utilize o comando.

db.test.find().pretty()

Agora, ao utilizar o comando show dbs; conseguimos visualizar o nosso banco de dados na listagem. Podemos também utilizar o comando: show collections; para visualizar nossas collections. Vamos realizar o update dos dados no MongoDB, utilize o comando abaixo para o update.

db.test.updateOne({"cod": "1"}, {$set: {"test": "Teste de edição de registro"}})

Nesta função passamos dois JSON, o primeiro e o filtro para que seja selecionado qual registro será atualizado. O segundo contém os novos dados do update, utilizamos o $set (agregação) ele vai atualizar as chaves existentes, caso não exista a chave, ele adiciona ela ao documento.

Por último, vamos realizar o delete do documento, para excluir os dados vamos utilizar o comando:

db.test.deleteOne({"cod": "1"})

Como no update, passamos um JSON que é o filtro para que seja excluído o registro que desejamos.

API Node.js

Vamos criar nossa API REST com o Node.js, que realizará as operações CRUD no MongoDB. Para criar nossa API, vamos utilizar os seguintes pacotes:

  • express – Framework Node.js para criarmos a base da aplicação.
  • body-parser – Middleware para trabalharmos com o corpo da requisição.
  • mongodb – Drive oficial do MongoDB para Node.js

Para criar esta aplicação, é um pré-requisito ter o Node.js e o NPM instalados na máquina.  Não irei abordar a fundo a instalação de ambos, para download e instalação acesse o link oficial: https://nodejs.org/en/download/.

Primeiro vamos criar nosso package.json, crie o arquivo: package.json e insira o seguinte conteúdo nele:

{
  "name": "nodejs-mongodb",
  "version": "1.0.0",
  "description": "Tutorial Node.js + MongoDB criando um CRUD.",
  "author": "Anderson Irias <contato@irias.com.br>",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "body-parser": "^1.19.0",
    "express": "^4.16.1",
    "mongodb": "^3.6.3"
  }
}

Após isso, utilize o comando abaixo para instalar as dependências do projeto.

npm install

Depois vamos criar o arquivo da nossa aplicação, nossa API terá somente 1 arquivo. Crie o arquivo app.js e insira o seguinte conteúdo nele:

const express = require('express');
const bodyParser = require('body-parser');
const mongoClient = require('mongodb').MongoClient;

const APP_PORT = 8080;
const APP_HOST = 'localhost';
const MONGO_HOST = 'mongodb://localhost:27017/';
const MONGO_DB = 'app';
const MONGO_COLLECTION = 'test';

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

app.post('/create', (req, res) => {
  mongoClient.connect(MONGO_HOST, (err, client) => {
    if (err) throw err
    const database = client.db(MONGO_DB);
    database.collection(MONGO_COLLECTION).insertOne(req.body, (err) => {
      if (err) throw err
      res.status(201);
      res.send();
    });
  });
});

app.get('/read', (req, res) => {
  mongoClient.connect(MONGO_HOST, (err, client) => {
    if (err) throw err
    const database = client.db(MONGO_DB);
    database.collection(MONGO_COLLECTION).find({ cod: req.query.cod }).toArray((err, result) => {
      if (err) throw err
      res.send(result);
    });
  });
});

app.put('/update', (req, res) => {
  mongoClient.connect(MONGO_HOST, (err, client) => {
    if (err) throw err
    const database = client.db(MONGO_DB);
    database.collection(MONGO_COLLECTION).updateOne({ cod: req.query.cod }, { $set: req.query }, (err) => {
      if (err) throw err
      res.send();
    });
  });
});

app.delete('/delete', (req, res) => {
  mongoClient.connect(MONGO_HOST, (err, client) => {
    if (err) throw err
    const database = client.db(MONGO_DB);
    database.collection(MONGO_COLLECTION).deleteOne({ cod: req.query.cod }, (err) => {
      if (err) throw err
      res.send();
    });
  });
});

app.listen(APP_PORT, APP_HOST);

Em nosso app.js, primeiro realizamos a inclusão das dependências. Depois criamos as variáveis com as configurações da aplicação.

  • Porta da API.
  • Host da API.
  • Host de conexão com o MongoDB.
  • Nome do banco de dados no MongoDB.
  • Nome da collection que estamos trabalhando.

Vamos utilizar o mesmo banco de dados e collection, que estávamos trabalhando anteriormente.

Nossas rotas da API utilizam os HTTP request Methods: post (create), get (read), put (update) e delete (delete). Leia no site da mozilla para mais informações sobre os métodos HTTP.

O funcionamento da nossa API é bem simples, recebemos a requisição na rota,  e depois utilizando as funções do Drive mongodb, realizamos as operações no banco de dados. As operações são as mesmas que fizemos pelo terminal, para mais exemplos leia na documentação do drive.

Para iniciar nossa API, utilize o comando:

npm start

Para realizar o teste em nossa API, pode ser utilizado o utilitário CURL pelo terminal Linux. Abaixo as requisições feitas com ele.

Create

curl --location --request POST 'http://localhost:8080/create' \
--header 'Content-Type: application/json' \
--data-raw '{
    "cod": "1",
    "teste": "Json para teste"
}'

Read

curl --location --request GET 'http://localhost:8080/read?cod=1'

Update

curl --location --request PUT 'http://localhost:8080/update?cod=1&teste=Teste%20de%20edi%C3%A7%C3%A3o'

Delete

curl --location --request DELETE 'http://localhost:8080/delete?cod=1'

Vou deixar o projeto disponível em meu GitHub: https://github.com/andersonirias/nodejs-mongodb-crud

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *