NestJS
Ar trebui să îți construiești aplicația ca pe un arbore de module, controllere și furnizori (providers). Aplicația de pornire expune un singur endpoint GET / care returnează "Hello, World!" — extinde-o adăugând mai multe rute, servicii și module urmând același model.
Fișierul de intrare
Fișierele soluției sunt organizate sub src/:
src/main.ts— inițializează aplicația și pornește serverul HTTP pe portul3000(preîncărcat, ascuns, doar citire).src/app.module.ts— modulul rădăcină care conectează controllerele și furnizorii (preîncărcat, doar citire).src/app.controller.ts— controllerul rădăcină care expuneGET /(preîncărcat, doar citire).src/app.service.ts— serviciul care oferă șirul de răspuns (fișier de soluție editabil).
Configurarea serverului pentru API Tester
Serverul este pornit de src/main.ts (NestFactory.create(AppModule) care ascultă pe portul 3000), deci rulează atunci când folosești tab-ul API Tester. API Tester trimite cereri HTTP reale către aplicația ta NestJS și afișează răspunsul în paralel.
import 'reflect-metadata';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap(): Promise<void> {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();Versiune
Rulează pe Node.js v22.0.0 cu NestJS 11.
Limbi suportate
TypeScript
Cadru de testare
Recomandări speciale și detalii de implementare
- Fiecare furnizor are nevoie de decoratorul
@Injectable(). Omiterea acestuia duce la o eroare confuză de tipulNest can't resolve dependenciesla runtime. - Fiecare controller și furnizor trebuie înregistrat în tabloul
controllers: [...]sauproviders: [...]al unui modul. Dacă adaugiFooServicedar uiți să îl listezi, NestJS nu îl va vedea. - Testele folosesc @nestjs/testing pentru a porni un mic
TestingModuledoar cu furnizorii de care are nevoie un controller — nu este nevoie să inițializezi întreaga aplicație.
Exemplu cu @nestjs/testing:
import 'reflect-metadata';
import { describe, it, expect, beforeEach } from 'vitest';
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './src/app.controller';
import { AppService } from './src/app.service';
describe('AppController', () => {
let controller: AppController;
beforeEach(async () => {
const moduleRef: TestingModule = await Test.createTestingModule({
controllers: [AppController],
providers: [AppService]
}).compile();
controller = moduleRef.get<AppController>(AppController);
});
it('returns "Hello, World!" on GET /', () => {
expect(controller.getHello()).toBe('Hello, World!');
});
});Biblioteci incluse
- @nestjs/common
- @nestjs/core
- @nestjs/platform-express
- @nestjs/testing
- reflect-metadata
- rxjs
- typescript
- vitest
Cum se depanează
NestJS este un framework de backend — codul tău rulează în Node, nu în browser. Există trei moduri principale de a inspecta comportamentul la runtime:
1. Jurnale (logs) de la controllere și servicii
Folosește console.log sau utilitarul integrat Logger pentru o afișare structurată:
import { Controller, Get, Logger } from '@nestjs/common';
@Controller('items')
export class ItemsController {
private readonly logger = new Logger(ItemsController.name);
@Get()
list() {
this.logger.log('GET /items called');
return [];
}
}Rezultatul apare în terminalul serverului de dezvoltare (sau în panoul de depanare al secțiunii Preview încorporate).
2. API Tester
Folosește tab-ul API Tester din panoul din dreapta pentru a trimite cereri HTTP reale (GET / POST / PUT / PATCH / DELETE) către serverul tău NestJS aflat în funcțiune. Alege o metodă, scrie o cale (de exemplu, /items), adaugă antete/parametri/corp (headers/params/body) și apasă pe Send. Răspunsul (status, antete, corp, timp) se afișează în paralel, astfel încât să poți lucra la controllere și servicii fără a părăsi editorul.
3. Pași pentru depanare folosind console.log
Identifică zona cu probleme: Determină dacă problema este în controller, într-un serviciu sau într-un furnizor personalizat.
Introdu instrucțiuni
console.log(): Adaugă apeluri de jurnalizare înainte și după codul suspect. Toate jurnalele NestJS merg în terminalul serverului.Verifică rezultatele testelor tale
Folosește pictograma de depanare (Debug) din zona Preview: Fă clic pe pictograma de depanare din zona Preview pentru a verifica terminalul.
Analizează rezultatul: Compară jurnalele cu răspunsurile din API Tester pentru a depista valori greșite, furnizori lipsă sau erori netratate.
Greșeli frecvente
- Lipsa
@Injectable()de pe un furnizor → DI eșuează cu o eroare confuză „Nest can't resolve dependencies”. Adaugă decoratorul la fiecare serviciu. - Ai uitat să înregistrezi în
app.module.ts→ controllerul sau furnizorul este invizibil pentru runtime. Adaugă-l încontrollers: [...]sauproviders: [...]. - Eșecuri de teste cu
Nest can't resolve dependenciesînTest.createTestingModule(...)→ listează fiecare furnizor de care are nevoie controllerul, chiar și în mod tranzitiv.