DEV Community

Tarcísio Corte
Tarcísio Corte

Posted on

NestJS: Pode usar mais e mais!


Venho trabalhando com NestJS em meus projetos pessoais desde 2019, basicamente são projetos para expor pequenas APIs que servem a alguns poucos e pequenos sites.
Recentemente tive a oportunidade de compor um time que estava usando NestJS de uma forma muito séria e fizemos a implementação de uma API muito robusta que esta escalando mais e mais.
Estou muito satisfeito com o resultado que o NestJS tem nos proporcionado e isso me motivou a fazer esses post.

O que é NestJS

Framework de NodeJs que possibilita aos desenvolvedores de TypeScript e JavaScript criar aplicações eficientes e capazes de escalar de maneira muito simples e rápida.
Escrevi TypeScript antes de JavaScript porque o NestJS é TypeScript first ou seja, todo o desenvolvimento é baseado em TypeScript mas é claro você ainda pode usar JavaScript (fique à lá vonté).
Um detalhe sobre o NestJS, "por baixo dos panos" NestJS faz uso do nosso querido Express. Você não é obrigado usar o Express, você pode trocar por Fastify. Esse é um post padrão, então vai seguir com o Express no exemplo!

Vamos ao tutorial

Primeiramente, vamos instalar e fazer uso da Nest CLI que é um command-line que vai nos ajudar a inicializar o projeto, nos ajuda no desenvolvimento e a manter o projeto também.
$ npm i -g @nestjs/cli
$ nest new project-name

Como demonstração neste post vamos criar uma API para registro de contatos.
Execute o comando:
nest new api-contact
Quando aparecer a pergunta - Which package manager would you ❤️ use? - selecione "npm".
Navega até a pasta:
cd api-contact
Você verá a seguinte estrutura inicial do projeto:

Estrutura básica de um projeto criado com Nest CLI

O scaffolding do NestJS já traz vários arquivos de projetos que nos ajudam muito durante o desenvolvimento.

Uma coisa, antes de começar a codificar, vamos adicionar o TypeORM

npm i --save @nestjs/typeorm typeorm
Enter fullscreen mode Exit fullscreen mode

Agora que já temos a dependência do TypeORM instalado, vamos criar nossa primeira entidade.
Crie um arquivo chamado contact.entity.ts

Agora vamos fazer uma de uma DTO que será usada para salvar os registros de contatos, então crie o arquivo CreateContact.dto.ts:

Não vou falar hoje sobre padrão Service Repository, mas pra quem conhece esse conceito vai identificar isso muito fácil no NestJS.
Crie o arquivo contacts.service.ts:

Obviamente a repository do exemplo salva dados em um banco de dados.
Vou fornecer aqui as configurações que eu usei para o PostgreSQL. Para isso usei o arquivo app.module.ts que é padrão já fornecido pelo scaffolding do NestJS:

Pra facilitar a vida de quem acompanha esse post vou deixar o arquivo docker-compose.yml disponível para quem tem interesse de já rodar a imagem de um PostgreSQL e testar a API.

Até aqui eu só mostrei o exemplo do código de produção, ou seja o código que necessitamos para rodar a API de forma funcional.
Agora, vamos ver a parte do código que corresponde aos Testes Unitários.

Por padrão o NestJS já cria um arquivo de teste que vem junto com o scaffolding.

Para esse exemplo vou deixar o código de testes unitários que usei para testar a nossa service, então veja o código do arquivo contacts.service.spec.ts:

Eu implementei alguns poucos testes, porém o que eu quero demonstrar é a facilidade que temos em montar nossos testes unitários com Jest e NestJS.
Veja como é fluída a codificação dos testes.

Código completo do exemplo no ❤️Github, onde tudo esta!

Conclusão
NestJS é um framework muito estável e de fácil adoção em aplicações de todos os níveis de complexidade isso porque ele é muito simples de se usar e também porque Nest CLI já te serve uma ótima estrutura de código para começo de projeto e de fácil alteração e evolução.

Discussion (3)

Collapse
micalevisk profile image
Micael Levi L. C.

Boa!

Grupo BR no Telegram sobre NestJS pra quem quiser tirar dúvidas e discutir sobre o fw: t.me/nestjsbr

Collapse
suhakim profile image
sadiul hakim

I desire to learn nestjs

Collapse
tarcisio profile image
Tarcísio Corte Author

Look at my github github.com/tarcisiocorte that I always update more and more javascript/typescript code.