Docker: Node.js + MongoDB — Apenas um CRUD

Raviel Chausse
5 min readSep 6, 2021
docker-nodejs-mongodb

Bom dia / boa tarde / boa noite

Nesse passo a passo vamos desenvolver um CRUD utilizando o Mongoose e os dois artigos lançados anteriormente.

Docker: MongoDB + Mongo Express — Primeiros passos
Docker: Node.js + Express.js — Um “Olá Mundo!” muito simples

Mas o que é Mongoose?

Mongoose é uma estrutura de modelagem de objeto para o MongoDB no Node.js e fornece uma solução simples, com base em esquema para modelar os dados do aplicativo.

Primeiramente vamos criar um novo diretório onde vão ficar os arquivos do projeto. Eu vou chamar de docker-nodejs-mongodb:

Nosso diretório

No novo diretório vamos criar um projeto npm como fizemos no artigo de Docker + NodeJs, utilizando o CMD (ou qualquer outro terminal):

Ainda no terminal, vamos instalar as dependências do nosso projeto. Para isso vamos utilizar o comando “npm i -S express mongoose cors

npm i -S express mongoose cors

Abrindo o diretório no editor de texto, vamos criar o arquivo “index.js” e começar a escrever nossa aplicação.

index.js

No arquivo package.json, vamos adicionar a chave/valor “start”: “npx nodemon index” na chave “scripts”:

package.json

Agora vamos fazer um pequeno teste para conferir se está tudo OK até aqui. No terminal vamos digitar “npm start”.

npm start

Abrindo o navegador na endereço localhost:3000 podemos ver a seguinte mensagem:

Olá mundo!

Configurando o MongoDB

Nesse momento vamos criar o arquivo chamado “docker-compose.yml” e fazer as configurações necessárias.

docker-compose.yml

Não se esqueça dos arquivos de configurações.

mongodb.env
mongo-express.env

No terminal digite “docker-compose up -d” para iniciar os containers do mongodb e mongo-express.

docker-compose up -d

No navegador, vamos acessar o mongo-express no endereço localhost:5081

mongo-express

Depois de acessar o mongo-express, vamos criar o database “meetups” que será o banco de dados utilizado por nossa aplicação.

meetup database

No docker-desktop vamos acessar o CLI do container do mongodb para adicionar o usuário da nossa aplicação.

docker-desktop

No CLI do container, vamos conectar no mongodb utilizando o usuário e senha configurados.

mongo -u admin -p admin

Após acessar o mongodb, vamos utilizar o nosso banco de dados da aplicação e vamos criar o nosso usuário utilizando o comando ‘db.createUser({ user: “meetup”, pwd: passwordPrompt(), roles: [{ role: “readWrite”, db: “meetups” }]})’ . Para o exemplo do artigo, irei criar um usuário com a senha ‘123456’.

Create user meetup

Configurando o Mongoose

Primeiramente vamos terminar de configurar o NodeJs no docker-compose.yml. Caso os containers do mongodb estejam rodando, será necessário rodar o comando “docker-compose down” antes de editar o arquivo docker-compose.yml.

docker-compose.yml

Vamos criar o dockerfile do NodeJs:

dockerfile

E vamos adicionar o arquivo de configuração do NodeJs.

nodejs.env

No arquivo “index.js” vamos configurar o Mongoose:

index.js — mongoose

No terminal, vamos utilizar o comando “docker-compose up -d” para provisionar novamente os containers.

docker-compose up -d (novo container)

No docker-desktop, agora vamos ver 3 containers rodando:

docker-desktop (novo container)

Clicando sob o container “MY_NODEJS” é possível visualizar os logs do container:

MY_NODEJS

Criando as rotas no ExpressJs

Como exemplo didático, estarei criando tudo dentro do mesmo arquivo “index.js”, o ideal é que haja uma separação de cada camada. Podemos ver essa separação em artigos futuros.

index.js — métodos

Veja como é simples criar as rotas no ExpressJs:

index.js — express route

Existem várias abordagens que podemos utilizar, desde fazer os tratamentos e validação da request para prevenir erros e melhorar feedbacks, até padrões de separações em camada e nomenclaturas de rotas e métodos.

A intenção desse artigo é apenas mostrar uma maneira simples (das várias possíveis) e completa de integração entre o backend e o banco de dados. Podemos evoluir muito essa pequena estrutura e crescer de maneira organizada para atender diversos cenários.

Até a próxima!

GitHub

github.com/rchaussetech/docker-nodejs-mongodb

--

--