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:
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! 🚀