Desenvolvendo APIs com NestJS + TypeORM — Parte 1

Olá Dev(a)!

Hoje vou começar uma série de artigos para falar sobre a criação de aplicações utilizando NestJS e TypeORM.

Depois de pesquisar, ler, e também apanhar um pouco 😅, decidi compartilhar um pouco do passo a passo, pois acredito que o conteúdo possa ajudar alguém.

Antes de tudo, vale dar um breve resumo sobre o que são cada um deles.

O NestJS é um Framework para o desenvolvimento de aplicações back-end no Node. Com o NestJS podemos desenvolver aplicações com TypeScript, e ele oferece integrações com Swagger, Sequelize, e TypeORM por exemplo, além de possibilitar o desenvolvimento de aplicações com CQRS através de packages específicos. Ou seja, é um framework bem completo e poderoso!

O TypeORM é um ORM que pode ser utilizado em plataformas como o Node, Ionic, dentre outras, e que possibilita o desenvolvimento tanto com JavaScript como com TypeScript. O TypeORM foi inspirado no Hibernate e Entity Framework, oferece suporte a Decorators e trabalha com bancos de dados como PostgreSQL, Microsoft SQL Server, e atualmente com MongoDB de forma experimental.

Nesta série, vamos desenvolver uma aplicação simples chamada Book Shelf (em português: prateleira de livros) que vai cadastrar os nossos livros e terá um status para cada um deles: Quero ler, Lendo e Lido.

Mas, vamos por partes!

Image for post
Image for post
Logo NestJS + Logo TypeORM

Vamos começar criando a nossa aplicação com o Nest!

Não vou me aprofundar em alguns conceitos, mas se você tiver interesse em aprender mais sobre Node.js, sugiro que faça o curso do Erick Wendel.

Para aprender um pouco sobre TypeScript, sugiro que assista esse e esse vídeo do Rocketseat.

Para criar uma aplicação com Node.js, é necessário ter o Node instalado em sua máquina. Basta entrar no site oficial e fazer o download de acordo com o seu Sistema Operacional. Aqui estou usando Windows e a versão 12.14.1 do Node.js.

Depois de instalar o Node, vamos inicializar nosso projeto. Vou usar o Visual Studio Code, mas sinta-se livre para utilizar o editor de sua preferência.

Uma observação: se ao tentar criar com as instruções abaixo, você se deparar com erros referentes a execução de scripts, pode ser que o problema seja a ExecutionPolicy do seu PowerShell. Para resolver esta situação, execute o comando Set-ExecutionPolicy -Scope Process -ExecutionPolicy ByPass antes de realizar as operações abaixo. É necessário executar este comando a cada vez que formos executar algum script pelo PowerShell, pois o Scope Process garante que poderemos executar scripts apenas durante uma sessão.

Depois de abrir o VS Code, abra o terminal a partir do menu Terminal >> New Terminal (ou Ctrl + Shift + ‘ para Windows). No terminal do VS Code, vamos executar o comando npm i -g @nestjs/cli para instalar o CLI do NestJS globalmente. Depois, vou acessar o meu workspace e executar o comando nest new book-shelf para gerar um novo projeto Nest, conforme na imagem abaixo:

Image for post
Image for post

Durante o processo de criação, o CLI do NestJS nos pergunta qual gerenciador de pacotes gostaríamos de utilizar para o projeto. Vou selecionar o npm, que vem por padrão com a instalação do Node. Depois disso, navegue até a pasta book-shelf (pasta do nosso projeto) e execute o comando code . -r para abrirmos o mesmo no VS Code.

Caso você escolha o yarn como gerenciador de pacotes, é necessário tê-lo instalado na máquina. Você pode baixar o yarn aqui.

Quando criamos o projeto por linha de comando, o NestJS o prepara com um repositório git inicializado, e uma estrutura básica que já nos possibilita rodar a aplicação. Os arquivos referentes à aplicação estarão na pasta src. Se abrimos novamente o terminal do VS Code, ele já se posiciona no diretório do projeto. Podemos executar o comando e npm start ao acessarmos a url http://localhost:3000, vamos ver o nosso primeiro endpoint funcionando:

Primeiro “Hello World” com NestJS!

E como o Nest sabe que a aplicação está rodando na porta 3000? 🤔 No arquivo main.ts podemos definir qual porta a nossa aplicação vai rodar. O método listen recebe a porta, e portanto podemos alterá-la, se assim quisermos.

Image for post
Image for post

Além disso, temos 3 elementos essenciais que fazem com que a aplicação funcione: Controllers, Modules e Providers.

Controllers são responsáveis por receber as requisições HTTP e enviar as respostas para quem está consumindo a nossa API.

Projetos NestJS possuem uma estrutura modular, que permite com que separemos as funcionalidades do projeto em módulos independentes (ou em inglês, Modules). Um módulo nos auxilia também na resolução de dependências. Todo projeto Nest deve ter pelo menos 1 módulo, que é chamado de root module, e na nossa aplicação identificamos o nosso app.module.ts. Uma classe Module é criada com o Decorator @Module, conforme vemos abaixo:

Image for post
Image for post

O arquivo main é a porta de entrada da nossa aplicação, e nele o NestFactory cria uma instância da aplicação a partir do nosso AppModule.

Providers são classes designadas a abstrair lógica e complexidade. Sendo assim, quando um Controller recebe uma requisição, esta deverá delegar tarefas mais complexas a um Provider. Providers também são conhecidos como Services, Repositories, Factories, e etc. Pra criarmos um Provider, devemos criar uma classe com o Decorator @Injectable. Isso fará com que o Provider esteja disponível para ser injetado em outra classe, como por exemplo um Controller. Eis o nosso primeiro Provider:

Image for post
Image for post

Bom, agora que entendemos alguns conceitos o Nest, e temos a nossa aplicação funcionando, precisamos iniciar a modelagem das nossas entidades e nos preocupar com a questões relacionadas ao acesso a banco de dados.

Veremos isso na próxima parte da série!

Espero que tenham gostado e deixem seus feedbacks para que eu possa cada vez mais trazer conteúdos legais para vocês!

Até mais! 👩‍💻

anamanzandev

Desenvolvimento de software

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store