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

Les frameworks Back-End Node.js : Express, Fastify, NestJS

Cette leçon compare les principaux outils pour créer un serveur avec Node.js : le module http natif, Express, Fastify et NestJS. Le même petit serveur est écrit avec chacun d'eux pour mesurer ce qu'ap...

0 chapitres 0 QCM Accès gratuit
Les frameworks Back-End Node.js : Express, Fastify, NestJS

À propos de ce cours

Cette leçon compare les principaux outils pour créer un serveur avec Node.js : le module http natif, Express, Fastify et NestJS. Le même petit serveur est écrit avec chacun d'eux pour mesurer ce qu'apporte chaque niveau. Elle explique comment NestJS s'appuie sur Express ou Fastify, présente un tableau comparatif et propose une activité pratique d'exécution des exemples.

Objectifs de la leçon

  • Comprendre ce qu'est un framework back-end.
  • Comparer Node.js natif, Express, Fastify et NestJS sur un même exemple.
  • Expliquer la relation entre NestJS, Express et Fastify.
Qu'est-ce qu'un framework back-end ?

Un framework est un cadre de travail : un ensemble d'outils et de conventions qui évite de réécrire les mêmes choses à chaque projet (gestion des routes, lecture du JSON, erreurs…). Pour mesurer ce qu'il apporte, écrivons le même serveur de quatre façons : il répond à GET /api/bonjour par { "message": "Bonjour" }.

1. Node.js sans framework
// serveur-natif.js  —  node serveur-natif.js
const http = require('http');

const serveur = http.createServer((req, res) => {
  if (req.method === 'GET' && req.url === '/api/bonjour') {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify({ message: 'Bonjour' }));
  } else {
    res.writeHead(404, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify({ erreur: 'Route introuvable' }));
  }
});

serveur.listen(3000, () => console.log('http://localhost:3000'));

Tout est manuel : tester la méthode et l'URL, écrire les en-têtes, convertir en JSON. Avec 50 routes, ce code devient vite illisible.

2. Express
// npm install express
const express = require('express');
const app = express();
app.use(express.json());        // lit automatiquement le JSON reçu

app.get('/api/bonjour', (req, res) => {
  res.json({ message: 'Bonjour' });
});

app.listen(3000);

Le routage et le JSON sont simplifiés. Express reste minimaliste: l'organisation du projet, la validation ou l'authentification sont à construire soi-même avec des bibliothèques externes (middlewares).

3. Fastify
// npm install fastify
const fastify = require('fastify')();

fastify.get('/api/bonjour', async () => {
  return { message: 'Bonjour' };   // converti en JSON automatiquement
});

fastify.listen({ port: 3000 });

Fastify (2016) ressemble à Express mais a été conçu pour la performance: il traite davantage de requêtes par seconde et intègre la validation par schémas JSON. Comme Express, il n'impose pas d'architecture.

4. NestJS
// bonjour.controller.ts
import { Controller, Get } from '@nestjs/common';

@Controller('api')
export class BonjourController {
  @Get('bonjour')
  direBonjour() {
    return { message: 'Bonjour' };
  }
}

Le code de la route est aussi court, mais il s'inscrit dans une architecture: le contrôleur est déclaré dans un module, il pourra recevoir un service, des validations, des guards… Et surtout, NestJS ne réinvente pas le serveur HTTP :

Couches Node.js Express Fastify NestJS

NestJS ajoute l'architecture ; Express ou Fastify gèrent le HTTP ; Node.js exécute le tout.

// main.ts — Express par défaut
const app = await NestFactory.create(AppModule);

// main.ts — avec Fastify (npm install @nestjs/platform-fastify)
const app = await NestFactory.create<NestFastifyApplication>(
  AppModule,
  new FastifyAdapter(),
);
Tableau comparatif
Node.js natifExpressFastifyNestJS
TypeBibliothèque de baseMicro-frameworkMicro-frameworkFramework complet
LangageJSJS (TS possible)JS (TS possible)TypeScript
Architecture imposéeNonNonNonOui (modules)
Validation intégréeNonNonSchémas JSONOui (pipes, DTO)
Injection de dépendancesNonNonNonOui
Prise en mainLongue à grande échelleTrès rapideRapideMoyenne
Idéal pourComprendre les basesPetits projets, prototypesAPI très sollicitéesProjets moyens à grands, équipes

D'autres frameworks Node.js existent (Koa, Hapi, AdonisJS…). Le choix dépend de la taille du projet, de l'équipe et des besoins de performance. Ce cours se concentre sur NestJS.

Activités

Activité 1 Exécuter les exemples

Pré-requis : Node.js installé (vérifiez avec node -v).

  1. Créez un dossier comparatif-serveurs, ouvrez-le dans VS Code et lancez npm init -y.
  2. Créez serveur-natif.js avec le code de la partie 1 et lancez node serveur-natif.js. Ouvrez http://localhost:3000/api/bonjour, puis une URL inexistante.
  3. Arrêtez le serveur (Ctrl+C), installez Express (npm install express) et testez la partie 2.
  4. Comparez le nombre de lignes et le code de statut obtenu sur une URL inexistante dans les deux cas.
Voir le corrigé

La version native compte environ 12 lignes contre 6 pour Express. Pour une URL inexistante, la version native renvoie le JSON d'erreur que nous avons écrit ; Express renvoie automatiquement une page « Cannot GET … » avec le statut 404. Express fait donc à notre place une partie du travail.

Activité 2 Ajouter une route

Dans la version Express, ajoutez la route GET /api/heure qui renvoie { "heure": "..." } avec l'heure actuelle. Comment écririez-vous la même route dans le contrôleur NestJS de la partie 4 ?

Voir le corrigé
app.get('/api/heure', (req, res) => {
  res.json({ heure: new Date().toLocaleTimeString('fr-FR') });
});
@Get('heure')
donnerHeure() {
  return { heure: new Date().toLocaleTimeString('fr-FR') };
}

À retenir

  • Node.js seul permet de créer un serveur, mais tout est manuel.
  • Express et Fastify simplifient le routage et le JSON, sans imposer d'architecture.
  • Fastify est orienté performance.
  • NestJS ajoute l'architecture et s'exécute au-dessus d'Express (par défaut) ou de Fastify.