Docker: Node.js + MongoDB — Apenas um CRUD
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:
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”
Abrindo o diretório no editor de texto, vamos criar o arquivo “index.js” e começar a escrever nossa aplicação.
No arquivo package.json, vamos adicionar a chave/valor “start”: “npx nodemon index” na chave “scripts”:
Agora vamos fazer um pequeno teste para conferir se está tudo OK até aqui. No terminal vamos digitar “npm start”.
Abrindo o navegador na endereço localhost:3000 podemos ver a seguinte mensagem:
Configurando o MongoDB
Nesse momento vamos criar o arquivo chamado “docker-compose.yml” e fazer as configurações necessárias.
Não se esqueça dos arquivos de configurações.
No terminal digite “docker-compose up -d” para iniciar os containers do mongodb e mongo-express.
No navegador, vamos acessar o mongo-express no endereço localhost:5081
Depois de acessar o mongo-express, vamos criar o database “meetups” que será o banco de dados utilizado por nossa aplicação.
No docker-desktop vamos acessar o CLI do container do mongodb para adicionar o usuário da nossa aplicação.
No CLI do container, vamos conectar no mongodb utilizando o usuário e senha configurados.
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’.
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.
Vamos criar o dockerfile do NodeJs:
E vamos adicionar o arquivo de configuração do NodeJs.
No arquivo “index.js” vamos configurar o Mongoose:
No terminal, vamos utilizar o comando “docker-compose up -d” para provisionar novamente os containers.
No docker-desktop, agora vamos ver 3 containers rodando:
Clicando sob o container “MY_NODEJS” é possível visualizar os logs do container:
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.
Veja como é simples criar as rotas no ExpressJs:
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!