Avez-vous une question? (216) 97 656 803 hajjriadh@gmail.com
NestJS

Pourquoi apprendre NestJS ?

Cette leçon présente les raisons d'apprendre NestJS : une architecture claire en modules, contrôleurs et services, TypeScript pour un code plus sûr, l'injection de dépendances qui facilite les tests, ...

0 chapitres 0 QCM Accès gratuit
Pourquoi apprendre NestJS ?

À propos de ce cours

Cette leçon présente les raisons d'apprendre NestJS : une architecture claire en modules, contrôleurs et services, TypeScript pour un code plus sûr, l'injection de dépendances qui facilite les tests, de nombreux outils intégrés (validation, base de données, JWT, Swagger) et une continuité naturelle avec Angular. Elle aborde aussi les limites du framework et propose des activités de comparaison de code.

Objectifs de la leçon

  • Citer les principaux atouts de NestJS.
  • Reconnaître le découpage contrôleur / service / données.
  • Connaître les limites du framework.
1. Une architecture claire et imposée

Dans NestJS, chaque fonctionnalité est rangée au même endroit et toujours de la même façon. Un projet NestJS ressemble à un autre projet NestJS : on s'y retrouve vite.

Architecture module contrôleur service NestJS

Un module regroupe un contrôleur, un service et l'accès aux données d'une même fonctionnalité.

src/
├── app.module.ts
├── main.ts
└── stagiaires/
    ├── stagiaires.module.ts        ← regroupe la fonctionnalité
    ├── stagiaires.controller.ts    ← routes HTTP
    ├── stagiaires.service.ts       ← logique métier
    ├── dto/create-stagiaire.dto.ts ← forme des données reçues
    └── entities/stagiaire.entity.ts← table de la base
2. TypeScript : moins d'erreurs

NestJS est écrit en TypeScript. Le typage permet à l'éditeur de signaler les erreurs avant l'exécution et offre une autocomplétion précise.

interface Stagiaire { id: number; nom: string; moyenne: number; }

function afficher(s: Stagiaire) {
  return s.nom.toUpperCase();
}

afficher({ id: 1, nom: 'Sami' });
// ✗ Erreur signalée dans l'éditeur : la propriété 'moyenne' est manquante
3. L'injection de dépendances

Un contrôleur n'instancie pas lui-même son service : il le demande dans son constructeur et NestJS le lui fournit. Le code est plus découplé et on peut remplacer facilement un service par une version de test.

@Injectable()
export class StagiairesService {
  findAll() { return [{ id: 1, nom: 'Ben Ali' }]; }
}

@Controller('stagiaires')
export class StagiairesController {
  constructor(private readonly stagiairesService: StagiairesService) {}

  @Get()
  findAll() {
    return this.stagiairesService.findAll(); // renvoyé automatiquement en JSON
  }
}
4. Des outils prêts à l'emploi
BesoinSolution NestJS
Valider les données reçuesValidationPipe + class-validator
Base de données SQL / NoSQL@nestjs/typeorm, Prisma, @nestjs/mongoose
Authentification@nestjs/jwt, @nestjs/passport, guards
Documentation de l'API@nestjs/swagger
Configuration (.env)@nestjs/config
Temps réel@nestjs/websockets
TestsJest et Supertest, configurés dès la création du projet
5. Le complément naturel d'Angular

Si vous avez suivi le cours Angular, vous connaissez déjà les modules, les décorateurs, les services et l'injection de dépendances. Avec NestJS, vous écrivez le front-end et le back-end avec le même langage et les mêmes concepts, et vous pouvez même partager des interfaces TypeScript entre les deux : c'est le profil développeur full-stack.

6. Un framework demandé

NestJS est utilisé par des start-up comme par de grandes entreprises pour leurs API et microservices. Maîtriser NestJS, c'est aussi maîtriser des notions transposables à d'autres frameworks (Spring en Java, ASP.NET Core en C#, Symfony en PHP) qui reposent sur les mêmes principes : contrôleurs, services et injection de dépendances.

Les limites à connaître
  • Une courbe d'apprentissage plus forte qu'Express : décorateurs, modules et injection de dépendances demandent un temps d'adaptation.
  • Plus de fichiers et de structure : pour un mini-projet de quelques routes, Express peut suffire.
  • Il faut connaître les bases de TypeScript (traité au chapitre 04).
Activités

Activité 1 Associer chaque fichier à son rôle

Associez chaque fichier à son rôle : main.ts, stagiaires.controller.ts, stagiaires.service.ts, create-stagiaire.dto.ts, stagiaires.module.ts.

Rôles : (a) décrire la forme des données reçues lors d'une création ; (b) démarrer l'application ; (c) déclarer les routes HTTP ; (d) regrouper le contrôleur et le service ; (e) contenir la logique métier.

Voir le corrigé

main.ts → (b) ; contrôleur → (c) ; service → (e) ; DTO → (a) ; module → (d).

Activité 2 Lire du code NestJS

Dans l'exemple de la partie 3 : quelle URL déclenche la méthode findAll() du contrôleur ? Que reçoit le client ? Pourquoi le contrôleur ne fait-il pas new StagiairesService()?

Voir le corrigé

La requête GET /stagiaires déclenche findAll(). Le client reçoit le tableau converti en JSON avec le statut 200. Le contrôleur ne crée pas le service lui-même : NestJS l'injecte grâce à l'injection de dépendances, ce qui permet de partager une seule instance et de la remplacer facilement pendant les tests.

À retenir

  • NestJS impose une architecture : module, contrôleur, service.
  • TypeScript détecte de nombreuses erreurs avant l'exécution.
  • L'injection de dépendances rend le code découplé et testable.
  • Validation, base de données, JWT, Swagger et tests sont intégrés.
  • Pour un développeur Angular, NestJS est la suite logique vers le full-stack.