Glossaire Node.js de A à Z

Glossaire Node.js — 115 définitions

.on() / .emit()
on(événement, callback) : enregistrer un écouteur. emit(événement, données) : déclencher l'événement (tous ses écouteurs sont appelés avec les données).
.once() / .off()
once() : écouter un événement une seule fois (désabonnement auto). off()/removeListener() : arrêter d'écouter un événement.
.pipe()
Connecte un stream de lecture à un stream d'écriture : les données coulent automatiquement de l'un à l'autre, morceau par morceau, avec gestion du débit.
« Ça marche sur ma machine »
Le problème que Docker résout : une application dépend de son environnement et peut échouer ailleurs ; le conteneur embarque son environnement, tournant partout à l'identique.
Adoption progressive
TS s'apprend par étapes (typage léger puis avancé) ; comme sur-ensemble de JS, la maîtrise de JavaScript est réutilisée — on ajoute les types par-dessus.
API + front séparé (SPA)
Alternative moderne : Node expose une API REST (JSON) consommée par un front séparé (React/Vue/Angular) qui gère l'affichage côté navigateur.
API REST
Style d'architecture d'API web : exposer des ressources (URL claires) manipulées par les méthodes HTTP selon leur sémantique, réponses en JSON avec les bons codes de statut.
async/await
Syntaxe moderne (sucre sur les Promises) : `await` attend le résultat d'une opération asynchrone sans bloquer ; le code asynchrone se lit comme du synchrone. Erreurs via try/catch.
Asynchrone non-bloquant
Modèle où les opérations lentes (fichiers, réseau, base) ne bloquent pas le programme : Node enregistre un rappel et passe à autre chose en attendant.
Asynchrone vs synchrone (fs)
L'asynchrone (non-bloquant) est à privilégier en serveur pour ne pas bloquer la boucle d'événements ; le synchrone (Sync) est réservé aux scripts/config au démarrage.
Authentification vs autorisation
Authentification : QUI est l'utilisateur (401 si non authentifié). Autorisation : a-t-il le DROIT de faire cette action (403 si non autorisé).
Base de données / persistance
Système sauvegardant durablement les données (utilisateurs, produits…). Deux familles : NoSQL (MongoDB) et SQL/relationnel (section 3-4).
Bénéfices de Docker
Reproductibilité (identique partout), isolation (pas de conflits), portabilité (tout hôte Docker), facilité de déploiement, onboarding rapide (docker compose up).
Bénéfices de TypeScript
Erreurs attrapées à la compilation, autocomplétion/outillage supérieurs, documentation implicite (les types décrivent), robustesse et maintenabilité sur les gros projets.
Bénéfices des tests
Confiance (le code fait ce qu'il doit), non-régression (détecter ce qu'une modif casse), documentation (comportement attendu), meilleure conception (code testable = mieux structuré).
Bonnes pratiques REST
URL cohérentes au pluriel, bonnes méthodes/codes de statut, gestion d'erreurs propre, pagination, versionnage (/api/v1/), réponse JSON structurée.
Boucle d'événements (event loop)
Mécanisme central orchestrant l'exécution : il lance les opérations lentes en arrière-plan et rappelle les fonctions quand les résultats arrivent.
Buffer
Zone de mémoire brute d'octets pour manipuler les données binaires (fichiers, réseau), que JavaScript n'a pas nativement ; les streams transportent souvent des Buffers.
Callback
Fonction passée en argument, appelée quand une opération asynchrone se termine. Convention Node « error-first » : premier argument = erreur (null si OK), puis le résultat.
Callback hell
Imbrication illisible de callbacks quand on enchaîne des opérations asynchrones dépendantes ; problème que les Promises et async/await résolvent.
Ce qu'Express simplifie
Le serveur natif gère tout à la main (routage par if, parsing du corps, en-têtes) ; Express fournit routage, parsing, middlewares — mais repose sur le module http.
Chemin de module
Local : commence par ./ ou ../ (fichiers du projet). Nom seul : module natif (fs) ou paquet npm de node_modules (express).
CI/CD (GitHub Actions)
Automatiser le chemin code → production : CI (à chaque push, tester/vérifier), CD (déployer automatiquement si les vérifications passent). GitHub Actions crée ces pipelines.
Clustering
Lancer plusieurs instances de l'application (une par cœur, via le module cluster ou PM2) qui se répartissent les requêtes ; exploite tous les cœurs (Node étant mono-thread).
CommonJS (CJS)
Système de modules historique de Node : export avec `module.exports`, import avec `require()`. Synchrone, simple, omniprésent dans l'écosystème npm.
Compilation (tsc) / tsconfig
TS ne s'exécute pas directement : le compilateur (tsc) vérifie et transforme les .ts en .js. Configuré via tsconfig.json ; ts-node exécute du TS directement en dev.
console.log()
Fonction d'affichage dans le terminal (équivalent de « print ») ; outil de base pour voir des valeurs, déboguer et tracer l'exécution.
const / let (vs var)
const : constante non réassignable (à privilégier). let : variable réassignable. Tous deux à portée de bloc. `var` est à éviter (portée déroutante).
CRUD
Les quatre opérations de base : Create (créer), Read (lire), Update (modifier), Delete (supprimer) ; en Mongoose, méthodes asynchrones (await).
dependencies vs devDependencies / node_modules
dependencies : nécessaires en production. devDependencies : utiles en dev seulement (-D). node_modules : dossier des paquets installés (non versionné, régénérable).
Déploiement
Faire tourner l'application sur un serveur accessible sur Internet (au lieu de localhost) ; via une plateforme PaaS (simple) ou un VPS/cloud (plus de contrôle et de responsabilités).
Destructuration
Extraction de valeurs d'objets/tableaux en une ligne : `const { nom } = obj;` ou `const [a, b] = arr;`. Omniprésente (imports, données).
Docker / conteneurisation
Outil empaquetant une application AVEC tout son environnement (Node, dépendances, config) dans un conteneur isolé et portable, qui tourne identiquement partout.
Docker Compose
Fichier docker-compose.yml définissant plusieurs conteneurs (app Node + base + cache…) et leurs relations, lancés ensemble (docker compose up) ; décrit toute la pile.
emit / on / broadcast
emit(événement, data) : envoyer. on(événement, callback) : recevoir. Le serveur émet vers un client, vers TOUS (io.emit, broadcast), ou vers des groupes (rooms).
Erreurs attendues vs inattendues
Attendues : ressource non trouvée (404), validation échouée (400) — gérées explicitement. Inattendues : bugs (500). Aussi : gérer les erreurs async (try/catch autour des await).
error-first / try-catch
Gestion d'erreurs : erreur en premier argument des callbacks ; .catch() pour les Promises ; try/catch autour des await.
ES Modules (ESM)
Système de modules standard du langage : export avec `export`, import avec `import`. La direction d'avenir ; activé via .mjs ou "type":"module" dans package.json.
Essentiels de production
Variables d'environnement (config + secrets, jamais dans le code/Git), HTTPS (chiffrement), logs et monitoring (surveiller), environnements séparés (dev/staging/prod).
Événement error
Événement spécial : un émetteur qui émet 'error' sans écouteur fait planter le programme — toujours écouter les erreurs.
EventEmitter
Classe native (module events) au cœur du modèle événementiel de Node ; de nombreux objets natifs (serveur HTTP, streams…) en héritent.
Exécuter un fichier
La façon principale de travailler : écrire son code dans un fichier .js et le lancer avec `node fichier.js` (Node exécute tout le fichier).
Express
Framework web de référence pour Node (minimaliste, flexible), bâti sur le module http ; simplifie routage, parsing et gestion des requêtes. Socle de la plupart des apps Node.
express.Router()
Outil regroupant les routes par ressource dans des fichiers séparés (routeur users, products…) montés sur l'app ; organise une API qui grossit.
Fichiers statiques
Ressources fixes livrées au navigateur (CSS, images, JS client, polices) ; servies simplement avec le middleware express.static('public').
Fonction fléchée (arrow)
Syntaxe concise `(a) => ...` pour écrire des fonctions, très utilisée pour les callbacks ; sans `this` propre (évite des pièges).
fs (file system)
Module de lecture/écriture de fichiers et dossiers ; fonctions en version asynchrone (à privilégier, fs.promises + await) ou synchrone (Sync, bloquante).
Gestion d'erreurs centralisée
Middleware Express spécial (err, req, res, next) placé en dernier, qui reçoit les erreurs et renvoie une réponse cohérente (bon code, message clair, sans fuite de détails sensibles).
Globaux Node vs navigateur
Node n'a PAS de window/document/DOM (pas de page web) ; il offre process, __dirname, __filename, global et l'accès au système.
Hachage des mots de passe (bcrypt)
On ne stocke JAMAIS un mot de passe en clair, mais son hachage à sens unique (bcrypt, avec sel, volontairement lent). À la connexion, on compare sans déchiffrer.
http (module natif)
Module permettant de créer un serveur web sans dépendance : http.createServer() avec une fonction appelée à chaque requête, puis .listen(port).
I/O-intensif vs CPU-intensif
Node excelle pour les tâches d'entrées/sorties (serveurs, API, temps réel) ; il est moins adapté aux calculs lourds prolongés (mono-thread).
Image / Dockerfile / conteneur
Image : modèle figé de l'app + environnement, défini par un Dockerfile (recette de construction). Conteneur : instance en exécution d'une image.
Injection SQL
Faille critique : ne JAMAIS concaténer des données utilisateur dans une requête SQL ; utiliser des requêtes paramétrées (les ORM protègent automatiquement).
JWT (JSON Web Token)
Jeton signé cryptographiquement émis après connexion, renvoyé par le client à chaque requête (en-tête Authorization) et vérifié par le serveur ; sans état, populaire pour les API.
LTS vs Current
LTS (Long Term Support, versions paires) : stable et maintenue longtemps, à privilégier. Current (impaire) : plus récente mais moins stable, pour tester les nouveautés.
map / filter / reduce
Méthodes de tableaux modernes pour transformer, filtrer et agréger des collections de façon fonctionnelle ; la manière moderne de traiter les données.
Méthodes & codes HTTP
Méthodes : GET (lire), POST (créer), PUT/PATCH (modifier), DELETE (supprimer). Codes : 200 OK, 201 Created, 400/401/404 (erreurs client), 500 (erreur serveur).
Middleware
Fonction (req, res, next) s'exécutant pendant le traitement d'une requête ; peut inspecter/modifier, exécuter du code, puis next() pour passer au suivant. LE concept clé d'Express.
Mise en cache (Redis)
Stocker en mémoire (ou dans Redis) les résultats coûteux (requêtes fréquentes, calculs) pour ne pas les refaire ; souvent le levier de performance le plus impactant.
Module
Fichier séparé avec une responsabilité, qui exporte ce qu'il rend disponible et importe ce dont il a besoin ; base de l'organisation du code.
Modules natifs (built-in)
Bibliothèques intégrées à Node (aucune installation), donnant accès au système : fs, path, os, http, crypto, events, stream… Importées par leur nom.
MongoDB (NoSQL orienté documents)
Base stockant des DOCUMENTS (structures type JSON/BSON) regroupés en COLLECTIONS, sans schéma rigide ; proche des objets JS, populaire avec Node.
Mongoose (ODM)
Object Document Mapper ajoutant une couche pratique sur MongoDB : schémas (structure + validation), modèles (méthodes de manipulation).
Moteur de templates (vues)
Outil générant du HTML dynamique à partir de templates (HTML + logique : variables, boucles, conditions) et de données ; EJS, Handlebars, Pug…
Moteur V8
Moteur JavaScript de Google Chrome (écrit en C++) qui compile et exécute le JS très rapidement ; le cœur de Node.js.
MVC / séparation des responsabilités
Modèles (données), Contrôleurs (logique de traitement), Routes (URL déléguant aux contrôleurs) ; sépare les préoccupations pour un code maintenable et évolutif.
Node + npm
L'installation de Node apporte l'exécutable Node (qui lance vos scripts) ET npm (le gestionnaire de paquets), installés ensemble.
Node.js
Environnement d'exécution permettant de faire tourner du JavaScript hors du navigateur (côté serveur), basé sur le moteur V8 plus une bibliothèque d'accès au système.
npm & le registre
Gestionnaire de paquets de Node, donnant accès au plus grand registre open source au monde (des centaines de milliers de bibliothèques réutilisables).
nvm (Node Version Manager)
Outil permettant d'installer plusieurs versions de Node et de basculer entre elles ; précieux quand des projets exigent des versions différentes.
ORM (Prisma, Sequelize)
Object-Relational Mapper faisant correspondre tables et objets JS et générant le SQL ; manipulation d'objets/méthodes plutôt que de SQL brut (lisible, sûr, productif).
os
Module d'accès aux informations système : plateforme, processeurs (os.cpus), mémoire, dossiers standard (homedir, tmpdir).
PaaS (Render, Railway…)
Plateformes simplifiant le déploiement : on connecte son dépôt Git, elles construisent, lancent, gèrent serveur/HTTPS/scaling ; niveau gratuit courant. Idéales pour débuter.
package-lock.json
Fichier verrouillant les versions EXACTES installées ; garantit que tout le monde installe les mêmes versions (reproductibilité).
package.json
Manifeste du projet : nom, version, dépendances, scripts, métadonnées. Créé avec `npm init` ; point de référence de tout projet Node.
path
Module de manipulation portable des chemins (path.join, resolve, basename, extname…) : gère les différences de séparateur entre systèmes (/ vs \).
Pipeline de middlewares
Chaîne de fonctions que chaque requête traverse ; routage, parsing (express.json), auth, gestion d'erreurs sont tous des middlewares (app.use ou par route).
Prisma (moderne)
ORM apprécié : schéma déclaratif (schema.prisma), migrations (versionner le schéma), client généré et TYPÉ (autocomplétion, sécurité des types — excellent avec TypeScript).
process
Objet global Node donnant accès au processus : arguments (process.argv), variables d'environnement (process.env), sortie (process.exit()).
Profilage / mesurer avant d'optimiser
Identifier les vrais goulots d'étranglement par la mesure avant d'optimiser (règle d'or) ; éviter d'optimiser à l'aveugle ou prématurément.
Programmation événementielle
Modèle où des objets émettent des événements et d'autres parties du code y réagissent en écoutant ; découplage par le nom de l'événement.
Promise
Objet représentant une valeur future (résultat d'une opération asynchrone). Trois états : pending, fulfilled (succès), rejected (erreur). Réactions via .then() et .catch().
Quand utiliser les streams
Dès qu'on traite de gros volumes (gros fichiers, uploads/téléchargements, flux réseau) ; pour de petits fichiers, readFile classique suffit.
REPL
Environnement interactif ouvert en tapant `node` seul : lit/évalue/imprime le JavaScript ligne par ligne. Idéal pour expérimenter sans créer de fichier.
req (request)
Objet de la requête entrante : méthode (req.method : GET/POST…), chemin (req.url), en-têtes (req.headers), et corps (lu comme un stream pour POST).
req / res enrichis
req : req.params (route), req.query (query string), req.body (corps). res : res.json(data), res.status(201).json(...), res.send, res.redirect.
require vs import
require() (CommonJS) et import (ESM) sont les deux syntaxes d'import ; comprendre les deux car les deux coexistent dans le code réel.
res (response)
Objet de construction de la réponse : statut (res.statusCode), en-têtes (res.setHeader), corps (res.write/res.end).
res.render()
Méthode Express rendant une vue : res.render('page', { données }) génère le HTML en injectant les données dans le template (dossier views/).
Ressources & méthodes HTTP
GET /users (lister), GET /users/:id (lire un), POST /users (créer), PUT/PATCH /users/:id (modifier), DELETE /users/:id (supprimer) — conventions cohérentes.
Rooms
Groupes de clients (un salon de chat, une partie) vers lesquels on diffuse sélectivement ; organisent la communication temps réel.
Routage
Association d'URL + méthode HTTP à des handlers : app.get('/users', ...), app.post(...), etc. Paramètres de route dynamiques : '/users/:id' → req.params.id.
Scaling horizontal / load balancer
Répartir la charge sur plusieurs serveurs/instances derrière un répartiteur de charge ; pour servir un très grand nombre d'utilisateurs (favorise les applications stateless).
Schéma & modèle
Le schéma définit la structure des documents (types, validations : required, unique, défauts) ; le modèle, créé depuis le schéma, offre les méthodes de manipulation.
Sécurité transversale
Helmet (en-têtes de sécurité), HTTPS, secrets en variables d'environnement (jamais dans le code), rate limiting, validation — et « ne jamais faire confiance aux entrées ».
semver & scripts npm
Versionnage MAJEUR.MINEUR.CORRECTIF (^ / ~ contrôlent les mises à jour acceptées). Les scripts npm définissent des commandes réutilisables (npm run ).
Session vs JWT
Session : état côté serveur + cookie d'identifiant. JWT : jeton auto-porteur sans stockage serveur. Deux façons de maintenir l'authentification (HTTP étant sans état).
Socket.IO
Bibliothèque de référence pour le temps réel en Node : événementielle (emit/on), avec reconnexion automatique, fallbacks, rooms et namespaces.
SQL (langage)
Structured Query Language : SELECT (lire), INSERT (créer), UPDATE (modifier), DELETE (supprimer), JOIN (combiner des tables liées).
SQL / relationnel
Bases organisant les données en tables (colonnes typées), lignes et relations via clés étrangères ; PostgreSQL, MySQL. Garanties fortes (schéma strict, transactions ACID).
SSR (Server-Side Rendering)
Le serveur génère le HTML complet et l'envoie au navigateur ; approche des sites classiques (contenu, SEO).
Stream (flux)
Traitement des données par morceaux (chunks), au fur et à mesure, plutôt que tout charger en mémoire ; efficace pour les gros volumes (mémoire et temps).
Template literal
Chaîne avec accents graves permettant d'insérer des variables : `Bonjour ${nom}` — plus propre que la concaténation avec +.
Temps réel
Situations où le serveur envoie des données au client sans qu'il les demande, instantanément (chat, notifications, données live, jeux) ; inadapté au modèle requête-réponse HTTP.
Terminal / PATH
Console où l'on lance node et npm ; `node -v` et `npm -v` vérifient l'installation (si elles répondent, Node est dans le PATH).
Tests automatisés (Jest)
Code qui teste votre code : unitaires (une fonction isolée), d'intégration (plusieurs parties/une route avec sa base), bout en bout. Jest est le framework populaire.
Typage statique vs dynamique
Statique (TS) : types déclarés et vérifiés AVANT l'exécution (à la compilation) — attrape des erreurs tôt. Dynamique (JS) : types vérifiés seulement à l'exécution (flexible mais source de bugs au runtime).
Types de streams
Readable (lecture), Writable (écriture), Duplex (les deux, ex. socket), Transform (transforme au passage : compression, chiffrement).
TypeScript
Sur-ensemble de JavaScript ajoutant le typage statique (tout JS valide est du TS valide) ; se compile en JavaScript ordinaire que Node exécute.
Validation des entrées
Vérifier que les données reçues d'un client ont le format attendu (champs requis, types, contraintes) AVANT de les traiter ; rejeter avec un 400 si invalides. Bibliothèques : Zod, Joi.
VPS
Serveur virtuel loué qu'on administre soi-même (Node, config, sécurité, PM2, Nginx, HTTPS) ; plus de contrôle et de flexibilité, mais plus de responsabilités.
VS Code
Éditeur standard pour Node/JavaScript : gratuit, support JS intégré, terminal intégré, extensions (ESLint, Prettier) pour la qualité et le formatage du code.
WebSocket
Protocole établissant une connexion PERSISTANTE et BIDIRECTIONNELLE : elle reste ouverte, et client et serveur s'envoient des messages à tout moment, dans les deux sens.
Worker threads
Threads séparés pour exécuter des tâches CPU-intensives (calculs lourds) sans bloquer le thread principal / la boucle d'événements.