À propos de ce cours
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.
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
| Besoin | Solution NestJS |
|---|---|
| Valider les données reçues | ValidationPipe + 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 |
| Tests | Jest 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.