NEST

Învață NestJS: comenzi explicate cu exemple

19 comenzi 7 categorii

În timp ce ecosistemul Node.js oferă o multitudine de biblioteci flexibile (cum sunt Express sau Fastify), el a suferit istoric de o lipsă cronică de structură arhitecturală: fiecare echipă își organiza fișierele și straturile într-un mod diferit, rezultând adesea în baze de cod greu de întreținut și testat.

NestJS, creat de Kamil Myśliwiec, a rezolvat definitiv această problemă devenind framework-ul enterprise standard pentru backend-uri TypeScript. Inspirat profund din principiile de design ale Angular, NestJS oferă o arhitectură modulară out-of-the-box, un container de Inversare a Controlului (IoC) extrem de puternic și un ciclu de viață riguros compus din Middleware, Guards, Interceptors, Pipes și Exception Filters.

Pipeline-ul de Prelucrare a unei Cereri în NestJS
# [Incoming HTTP Request]
#           │
#           ▼
#    [Global & Route Middleware] (ex: CORS, CookieParser, BodyParser)
#           │
#           ▼
#    [Guards] (ex: AuthGuard, RolesGuard - Verificare drepturi de acces)
#           │
#           ▼
#    [Interceptors - Pre-controller] (ex: Măsurare timp de execuție, Logging)
#           │
#           ▼
#    [Pipes] (ex: ValidationPipe cu class-validator - Transformare & Validare DTO)
#           │
#           ▼
#    [Controller Handler Method] ──► [Service Business Logic]
#           │
#           ▼
#    [Interceptors - Post-controller] (ex: Mapare format răspuns JSON)
#           │
#           ▼
#    [Exception Filters] (Dacă a apărut o eroare: transformare în cod HTTP RFC 7807)
#           │
#           ▼
#    [Final HTTP Response]

Pilonii Tehnologici ai NestJS

Element Arhitectural Decorator TypeScript Responsabilitate în Sistem
Module (@Module) @Module({ controllers, providers, exports }) Organizează aplicația în domenii de afaceri decuplate (UserModule, OrderModule).
Controllers (@Controller) @Controller('users'), @Get(':id') Răspund de rutarea cererilor HTTP și returnarea răspunsurilor către clienți.
Providers / Services @Injectable() Încapsulează logica de business, accesul la date și integrarea cu terți (injectabili prin IoC).
Guards (@Injectable) canActivate(context: ExecutionContext) Determină dacă o cerere are permisiunea să ajungă la controller (Autentificare & Autorizare).
Controller și Service Tipizat în NestJS
// users.service.ts
import { Injectable, NotFoundException } from '@nestjs/common';

export interface User { id: number; name: string; role: string; }

@Injectable()
export class UsersService {
  private users: User[] = [{ id: 1, name: 'Alex Popa', role: 'ADMIN' }];

  findAll(): User[] {
    return this.users;
  }

  findOne(id: number): User {
    const user = this.users.find(u => u.id === id);
    if (!user) throw new NotFoundException(`Utilizatorul cu ID-ul ${id} nu există.`);
    return user;
  }
}

// users.controller.ts
import { Controller, Get, Param, ParseIntPipe, UseGuards } from '@nestjs/common';
import { UsersService, User } from './users.service';

@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Get()
  getAllUsers(): User[] {
    return this.usersService.findAll();
  }

  @Get(':id')
  getUserById(@Param('id', ParseIntPipe) id: number): User {
    return this.usersService.findOne(id);
  }
}

core 4 comenzi

Arhitectură & Module 1 comandă

Injecție de Dependințe & IoC 1 comandă

Guards, Pipes & Interceptors 1 comandă

http 6 comenzi

Microservicii & Transportori 1 comandă

pipeline 5 comenzi