Configurando o mongoose em projetos com ExpressJS

Hudson Brendon
Oct 7 · 6 min read

Mongoose é uma biblioteca do NodeJS que proporciona uma solução baseada em esquemas para modelar os dados da sua aplicação. Ele fornece um mapeamento de documentos do MongoDB similar ao ORM (Object Relational Mapping), ou ODM (Object Data Mapping) no caso do Mongoose. Exemplificarei aqui como configurar ele em um projeto com Express e o mesmo em ação.

Configurando o projeto

A Para exemplificar melhor, criaremos uma aplicação bem simples com ExpressJs. Para isso, crie uma pasta chamada project em algum diretório qualquer, e dentro dela execute:

$ yarn init -y

O comando acima criará um arquivo chamado package.json, é nele que ficara guardado a lista de dependências do projeto entre outras configurações necessárias.

Em seguida instalaremos as dependências necessárias. A primeira delas é o ExpressJS, para isso execute:

$ yarn add express

O express é o framework que será responsável por processar todas as requisições e gerenciar todo fluxo da aplicação.

Precisamos também instalar o body-parser, que será responsável por interpretar todas as requisições que venham com dados em JSON por exemplo, para isso execute:

$ yarn add body-parser

Com as dependências instaladas, precisamos agora criar a estrutura de diretórios necessária. Para isso, dentro da pasta project, crie uma pasta chamada src, é nela onde ficará todo o código relacionado a aplicação.

Feito isso, dentro da pasta src, precisamos criar as pastas controllers, models e routes, que serão responsáveis por armazenar os controllers, models e routes respectivamente.

Precisamos também criar um arquivo chamado index.js dentro da pasta src, esse arquivo será responsável por instanciar nosso express e configurar tudo que for necessário referente a ele.

Por ultimo mas não menos importante, criaremos também uma pasta chamada config dentro da pasta src com um arquivo chamado database.js onde ficará toda a nossa configuração referente ao mongoose.

A estrutura final será algo como isso:

src
├── config
│ └── database.js
├── controllers
├── index.js
├── models
└── routes

Com a estrutura de pastas devidamente criada, iremos agora configurar nossa aplicação, para isso no arquivo index.js criado dentro da pasta src, adicionaremos o código abaixo:

Começamos importando o express e body-parser. Em seguida instanciamos o express em uma constante chamada app. E por fim setamos o body-parser para aceitar requisições com dados json e configuramos o urlencoded do mesmo para aceitar parâmetros via URL, por fim exportamos a aplicação onde utilizaremos mais pra frente.

Agora precisaremos criar um arquivo chamado server.js no mesma pasta onde o package.json foi criado, ele será responsável por executar nossa aplicação, para isso crie o arquivo server.js com o conteúdo abaixo:

Rodando o MongoDB com Docker em ambiente de desenvolvimento

Com o docker instalado, utilizaremos a image oficial do MongoDB para criar um container com o banco já pré-configurado para utilizar em nossa aplicação, para isso execute:

$ docker pull mongo

Após fazer o download da imagem, precisamos agora criar uma instância para conectarmos a aplicação, para isso execute:

$ docker run --name mongo -p 27017:27017 -d mongo
  • O parâmetro — name indica o nome do nosso container, que será chamado de mongo;
  • O parâmetro -p indica o link da porta 27017 do nosso container com a porta 27017 do nosso host. É através disso que linkamos as duas e conseguimos acessar o serviço executado dentro do container no nosso host principal;
  • o parâmetro -d indica a imagem que usaremos como base para criação do nosso container, no nosso caso a do mongo.

Execute o comando abaixo para visualizar os containers em operação:

$ docker ps

Teremos um resultado semelhante a isso:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
0030fd438648 mongo "docker-entrypoint.s…" 2 seconds ago Up 1 second 0.0.0.0:27017->27017/tcp mongo

Conectando o banco

Com nosso container em execução, é hora de conectarmos nosso banco. Para isso,

$ yarn add mongoose

Con o mongoose instalado, abra o arquivo database.js presente na pasta config e adicione o código abaixo:

Começamos importando o mongoose, em seguida configuramos uma constante chamada MONGODB_URL que armazena o endereço da nossa aplicação.

Feito isso, usamos a função connect do mongoose que recebe uma url, e um objeto com uma série de configurações, no exemplo acima utilizamos apenas o useMongoClient, que habilita o acesso do banco via clientes.

Por fim setamos uma Promise, no exemplo acima utilizando o padrão que é a Promise do próprio NodeJS, e por fim exportamos o mongoose.

Criando o model

Com o mongoose configurado, criaremos o nosso primeiro model, para isso, crie um arquivo chamado user.js dentro da pasta models com o seguinte conteúdo:

Nesse arquivo definimos um UserSchema, que representará o modelo de documento em nosso banco, temos campos do tipo String e Date, e parâmetros como require, que indica que o campo é obrigatório, para saber sobre todas as opções possíveis acesse a documentação.

Criando o controller

Com o model pronto, precisamos agora criar um controller que fará o meio de campo entre as nossas rotas e os models, é nele que listamos, criamos, atualizamos e remove-mos usuários em nosso banco por exemplo. Para isso, na pasta controllers, crie um arquivo chamado user.js com o conteúdo abaixo:

Começamos importando o model de User, é através dele que criaremos e listaremos os usuários presentes no banco.

Em uma estrutura de classe criamos dois métodos, o create que será responsável por criar nossos usuários com os dados oriundos da requisição post, e o list, que será responsável por listar todos os usuários presentes em nosso banco utilizando para isso o método get.

Criando a rota

Com o controller configurado, precisamos agora criar nossa rota. Na pasta routes crie um arquivo chamado user.js com o conteúdo abaixo:

Começamos importando o express e nosso controller UserController. Criamos uma constante router que instancia a um Router(), e uma constante userController, que armazena uma instância do nosso controller de mesmo nome.

Por fim, passamos o create do UserController para toda requisição post que for requerida no /users. E o list para toda requisição get que for requerida no /users.

Para finalizar a configuração das rotas, no arquivo index.js devemos importar nosso UserRouter e indicar como dependência em nossa aplicação ficando dessa forma:

Testando a conexão

Precisamos agora criar alguns usuários para testar a conexão, models, controllers e routes da nossa aplicação. Primeiramente no arquivo package.json, crie um novo campo chamado scripts que ficará dessa forma:

Feito isso, precisamos agora executar nosso servidor localmente, para isso execute:

$ yarn start

O servidor será executado na porta 3000 do nosso localhost.

Com nosso servidor em execução, já podemos criar nosso primeiro usuário, para isso execute:

$ curl -d '{"name": "Hudson Brendon", "email": "hudsonbrendon@email.com", "password": "abc@123"}' -H "Content-Type: application/json" -X POST http://localhost:3000/users

O comando acima realiza uma requisição do tipo post para o /users com os dados necessários para a criação de um usuário, se tudo o correu bem, um objeto com os dados do usuário criado será retornado.

Para listar os usuários do nosso banco, podemos executar o comando abaixo:

$ curl  -H "Content-Type: application/json" -X GET http://localhost:3000/users

O comando acima retornará um array contendo todos os usuários presentes no banco.

Conclusão

Como visto aqui a utilização do mongoose em projetos com ExpressJS é algo bem simples, o ODM sem dúvida facilita e muito a vida do desenvolvedor, proporcionando com isso ganho de tempo e produtividade. No próximo post explicarei como configurar o PostgreSQL em projetos com ExpressJS, até a próxima.

❤ Gostou? Vamos espalhá-lo — curte e compartilha aí o/

Code Rocket Blog

Code Rocket

Hudson Brendon

Written by

Developer and content creator

Code Rocket Blog

Code Rocket

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade