a · Installer NestJS
- About 35 minutes
- 3 exercises
This content is not available in your language yet.
NestJS est un framework backend écrit en TypeScript, construit sur Express par défaut — tout ce que tu as appris en partie 2 tourne encore en dessous. Sa CLI génère un projet complet, avec une organisation imposée : c’est justement cette structure qui va rendre ton code plus facile à faire grandir qu’avec Express seul.
Créer un projet
Section intitulée « Créer un projet »npx @nestjs/cli new nom-du-projetLa CLI demande quel gestionnaire de paquets utiliser : choisis npm. Une fois l’installation terminée :
cd nom-du-projetnpm run start:devVisite http://localhost:3000 : tu devrais voir Hello World!. start:dev relance le serveur à chaque modification, comme node --watch en partie 2 — sauf que la CLI NestJS s’en charge elle-même.
Le projet généré
Section intitulée « Le projet généré »src/ main.ts point d'entrée : démarre le serveur app.module.ts module racine app.controller.ts la route « Hello World! » app.service.ts la logique derrière cette routeimport { NestFactory } from '@nestjs/core';import { AppModule } from './app.module.js';
async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(process.env.PORT ?? 3000);}await bootstrap();NestFactory.create(AppModule) construit ton application à partir du module racine, AppModule — le point de départ de tout ce que NestJS doit charger.
import { Module } from '@nestjs/common';import { AppController } from './app.controller.js';import { AppService } from './app.service.js';
@Module({ imports: [], controllers: [AppController], providers: [AppService],})export class AppModule {}Tu remarques les imports en .js, alors que les fichiers sont en .ts : c’est la convention de résolution de modules que NestJS utilise par défaut (nodenext) — imite-la, tu n’as pas besoin de la comprendre en détail pour l’instant.
import { Controller, Get } from '@nestjs/common';import { AppService } from './app.service.js';
@Controller()export class AppController { constructor(private readonly appService: AppService) {}
@Get() getHello(): string { return this.appService.getHello(); }}import { Injectable } from '@nestjs/common';
@Injectable()export class AppService { getHello(): string { return 'Hello World!'; }}Reconnais le raccourci de constructeur (private readonly appService: AppService) de la partie 1, et le décorateur @Injectable() que tu y as toi-même écrit en partie 1 section d — ici appliqué pour de vrai. Les sections b, c et d de cette partie détaillent chacun de ces trois fichiers.
Un dernier détail, déjà réglé pour toi : ouvre tsconfig.json, tu y trouveras "experimentalDecorators": true et "emitDecoratorMetadata": true — exactement ce dont je parlais en partie 1 section d.
Exercises 3.1 to 3.3
Project: marketplaceCrée un projet NestJS (ou forke le dépôt d’exercices, qui en contient déjà un : voir « À propos »), lance-le avec npm run start:dev, et vérifie avec curl http://localhost:3000 que tu obtiens Hello World!.
Pendant que start:dev tourne, modifie le message renvoyé par AppService.getHello(). Enregistre, puis relance ta requête curl sans redémarrer le serveur toi-même : le nouveau message doit apparaître.
app.listen(process.env.PORT ?? 3000) utilise la variable d’environnement PORT si elle existe, sinon 3000. Relance ton serveur avec PORT=4000 npm run start:dev, et vérifie qu’il répond bien sur http://localhost:4000 — et plus sur 3000.
To check your work: npm run test:partie-3 (exercises repository)