Como criar um backend com NestJS integrado ao MongoDB via Mongoose

Adson Rocha
6 min readOct 23, 2019

--

Vamos direto ao ponto, como sempre:

  • Esse tutorial foi feito usando o Windows na versão de 64 bits.
  • Você vai precisar ter o nodejs instalado.

Criando o projeto NestJS

Instale o nestJS CLI (command line interface), abrindo uma janela de comandos do windows (command prompt) e executando o comando:

npm i -g @nestjs/cli

Para criar um novo projeto nestjs, execute o comando:

nest n nest-mongo

No comando acima, nest-mongo é o nome do projeto. Você pode trocá-lo. Na janela de comandos, mude para o diretório do projeto:

cd nest-mongo

Instale os pacotes do Mongoose para fazer o acesso ao MongoDB:

npm i --save mongoose @nestjs/mongoose

Instale as demais dependências do projeto:

npm i

Crie os arquivos para nosso módulo de exemplo de CRUD (Create, Read, Update and Delete) de usuário no banco de dados:

nest g module user
nest g service user
nest g controller user
nest g class user/user.model

Criando uma conta no MongoDB Atlas

Para criar uma conta no MongoDB Atlas, acesse https://www.mongodb.com/cloud/atlas e crie uma conta. Na tela de planos, clique no botão Create a cluster do plano Starter Clusters (primeiro da esquerda):

Na próxima tela, basta deixar as opções selecionadas por padrão e clicar no botão Create cluster na parte inferior direita.

Aguarde enquanto o MongoDB Atlas cria seu cluster. Junto ao botão Get started na parte inferior esquerda há uma lista de tarefas (Connect to Atlas) a serem completadas para configurar o cluster.

Acesse o item Database Access no menu lateral esquerdo para criar um usuário que vai acessar o nosso banco de dados de exemplo:

Clique no botão Add new user para criar o usuário:

Nos campos onde se lê Enter username e Enter password, informe o nome de usuário e a senha respectivamente. Deixe marcado a opção Read and write to any database por enquanto. Depois clique no botão Add User.

Acesse o item Network Access no menu lateral esquerdo e na tela que se abre, clique no botão Add IP Address. Isso vai definir quais computadores podem acessar seu banco de dados.

Para que nossos testes aqui funcionem, clique novamente no botão Add IP Address e, na tela que se abre, clique no botão Add Current IP Address. Depois clique no botão Confirm.

Aguarde a conexão ser estabelecida com seu cluster. Na seção que mostra seu cluster recém criado (Cluster0)e conectado, clique no botão Connect.

Selecione Connect Your Application na tela de configuração da conexão:

Certifique-se que a opção marcada no passo 1 dessa tela seja Node.js. Depois clique no botão Copy do passo 2 e guarde esse endereço para ser usado na configuração do arquivo app.module.ts do projeto NestJS:

Clique no botão Close e depois no botão Collections do seu cluster. Para criar um novo banco de dados, na aba Collections do seu cluster, clique no botão Add my own data.

Pelo fato de o banco estar vazio, precisamos especificar tanto o seu nome (Database name) quanto o da primeira coleção (Collection name) que vai ser adicionada a ele. No nosso caso, o banco vai ser chamar test e a coleção, users. Depois clique no botão Create:

Já temos assim o banco criado para armazenar nossos documentos com os dados dos usuários do nosso exemplo.

Configurando o Mongoose no NestJS

Abra o arquivo app.module.ts e importe o MongooseModule passando como parâmetro o endereço de conexão que pedi para você guardar:

Note que no endereço de conexão há uma referência para o nome do banco que criamos (test), o nome de usuário (adsonrocha)e a senha (123456). Atualize com os valores que você escolheu.

Exemplo:
mongodb+srv://adsonrocha:123456@cluster0–5efft.mongodb.net/test?retryWrites=true&w=majority

Abra o arquivo user.model.ts e exporte uma interface para o documento usuário e um esquema do mongoose que o representa:

Note que para o esquema, usam-se objetos de configuração para cada atributo da entidade. Você pode saber mais sobre os atributos e possíveis valores na documentação do Mongoose.

Abra o arquivo user.module.ts e importe o módulo do Mongoose para o esquema do Usuário que acabamos de criar:

Podemos agora injetar o modelo em nossa camada de serviço e usar os métodos do Mongoose para realizar o CRUD de forma simples. Para isso, abra o arquivo user.service.ts e injete o modelo no construtor da classe:

Criamos um método create para testar a criação de um documento no MongoDB usando o modelo injetado.

Criaremos agora a classe controller que recebe as chamadas http do cliente. Ela será responsável por chamar o método correspondente na classe de serviço que implementamos anteriormente. Abra a classe user.controller.ts e defina os métodos para o CRUD:

Hora de testar

Nós vamos usar o Postman para fazer as requisições http para nosso backend NestJS. Para baixá-lo e instalá-lo, clique aqui.

Depois de instalar o Postman, crie uma nova requisição do tipo POST com o endereço:

localhost:3000/user/create

Acesse a aba Body, marque a opção raw e no seletor de tipo de dados, selecione JSON, como na figura abaixo. No campo para incluir os dados que vão no corpo da requisição, inclua um objeto contendo o nome (name), idade (age) e situação (active) do usuário a ser incluído. Observe que os dados devem respeitar a sintaxe JSON.

Então clique no botão Send e observe na aba Body da resposta (parte inferior da tela) que o método create do user.service respondeu com o id do nosso usuário criado.

Deu certo!

Para conferir, você pode acessar o MongoDB Atlas e na aba Collections do seu cluster, clique no botão Refresh e veja o documento criado:

Bom, isso é tudo! Se você gostou do tutorial, marque com as palmas aqui e compartilhe nas suas redes sociais para mais pessoas aprenderem.

O código completo você pode ver em https://github.com/adsonrocha/nest-mongo.

Tchau! 😉

--

--

Adson Rocha

Ph.D. in Computer Engineering and professor at Goiano Federal Institute (Brazil).