logo site seligadev
Banner do Post

Destrinchando o NestJS: do zero ao primeiro endpoint

Jander Nery

Jander Nery

icon social media linkedinicon social media linkedinicon social media X

Se você sempre quis aprender NestJS mas não sabia por onde começar, esse guia é para você!

Vamos passo a passo entender os fundamentos e colocar a mão na massa até termos nossa primeira API rodando.


1️⃣ Instalação do NestJS CLI

👉 Comando mágico para instalar a CLI:

npm i -g @nestjs/cli

2️⃣ Criação do projeto

nest new meu-projeto

📂 Estrutura do projeto:

📂 meu-projeto
├── 📁 src
│   ├── 📁 users
│   │   ├── users.controller.ts
│   │   ├── users.service.ts
│   │   └── users.module.ts
│   ├── app.module.ts
│   ├── app.controller.ts
│   ├── app.service.ts
│   └── main.ts
├── .env
├── package.json
└── tsconfig.json

3️⃣ Utilizando a CLI para gerar atributos

nest generate module users
nest generate service users
nest generate controller users

4️⃣ Entendendo os Módulos

📦 Conceito Fundamental

Os módulos no NestJS são a unidade organizacional fundamental do framework, representando um mecanismo de encapsulamento e organização que define como os componentes da aplicação se relacionam e interagem entre si.

🧩 Definição Conceitual

Um módulo no NestJS é essencialmente um contêiner lógico que agrupa funcionalidades relacionadas, fornecendo um contexto isolado onde providers, controllers, middlewares e outros elementos podem ser organizados de forma coesa.

⚙️ Características Teóricas Fundamentais

1. Encapsulamento

Os módulos criam fronteiras bem definidas entre diferentes partes da aplicação, permitindo que cada módulo mantenha sua própria responsabilidade.

2. Injeção de Dependência Contextualizada

Cada módulo possui seu próprio contexto de injeção de dependência, onde os providers são registrados e podem ser compartilhados.

3. Composição Hierárquica

Os módulos seguem uma estrutura hierárquica onde existe um módulo raiz (root module) que importa outros módulos.

🏗️ Elementos Estruturais

Decorator @Module()

Cada módulo é definido através do decorator
@Module()
, que aceita:
  • imports: Define quais outros módulos são necessários
  • controllers: Especifica os controladores que pertencem ao módulo
  • providers: Lista os provedores de serviços disponíveis no módulo
  • exports: Determina quais providers podem ser utilizados por outros módulos

5️⃣ O que é Injeção de Dependência

👉 Conceito que ajuda a manter o código organizado, escalável e fácil de testar.

"A injeção de dependência é um padrão que permite que objetos recebam suas dependências de fontes externas, ao invés de criá-las internamente."


6️⃣ Entendendo o Lifecycle do NestJS

O ciclo de vida define como o Nest lida com instâncias, inicialização e destruição.

Principais hooks do lifecycle:

  • onModuleInit()
  • onApplicationBootstrap()
  • onModuleDestroy()
  • beforeApplicationShutdown()

7️⃣ Entendendo os Controllers

🎯 São os pontos de entrada da sua API.

Responsáveis por:

  • Receber requisições HTTP
  • Validar dados de entrada
  • Chamar os services apropriados
  • Retornar respostas formatadas

8️⃣ Entendendo os Services

🧠 Aqui fica a lógica de negócio.

Responsabilidades:

  • Implementar regras de negócio
  • Interagir com banco de dados
  • Processar dados
  • Comunicação com APIs externas

9️⃣ Expondo nossas portas

🌐 Por padrão, o NestJS roda em
http://localhost:3000
.

Para alterar a porta, modifique o arquivo
main.ts
:

const port = process.env.PORT || 3000;
await app.listen(port);

🔟 O que é .env

📄 Arquivo para gerenciar variáveis de ambiente.

Exemplo de
.env
:
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
JWT_SECRET=minha-chave-secreta
PORT=3000

1️⃣1️⃣ Usando o .env com o ConfigModule do NestJS

Exemplo de implementação:

import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule.forRoot()],
})
export class AppModule {}

1️⃣3️⃣ Considerações finais

🎉 Você agora já tem a base para construir APIs poderosas com NestJS!

Próximos passos:

  • Implementar autenticação
  • Conectar com banco de dados
  • Adicionar validações
  • Escrever testes

"O NestJS combina o melhor do TypeScript com padrões arquiteturais sólidos para criar aplicações robustas e escaláveis."


Compartilhe este guia com outros desenvolvedores! 🚀

Destrinchando o NestJS: do zero ao primeiro endpoint | Se Liga Dev