Node.js & npm : le runtime JavaScript serveur
⏱ 50 minNode.js exécute JavaScript hors du navigateur. npm (Node Package Manager) donne accès à 2 millions de packages.
Modules Node.js intégrés
const fs = require("fs");
const path = require("path");
const http = require("http");
// Lire un fichier
const data = fs.readFileSync("data.json", "utf8");
const parsed = JSON.parse(data);
// Écrire un fichier
fs.writeFileSync("output.json", JSON.stringify(result, null, 2));
// Chemin portable (Windows/Mac/Linux)
const filePath = path.join(__dirname, "data", "train.csv");
npm — gestion des dépendances
npm init -y # créer package.json
npm install express # installer
npm install --save-dev jest # dépendance de dev
npm run start # exécuter le script "start"
npm test # exécuter les tests
Package.json — le cœur du projet Node
{
"name": "ml-api",
"version": "1.0.0",
"scripts": {
"start": "node src/index.js",
"dev": "nodemon src/index.js",
"test": "jest"
},
"dependencies": {
"express": "^4.18.0"
}
}
Asynchrone en Node.js — tout est événementiel :
// Éviter les callbacks imbriqués (callback hell)
// ✅ Utiliser async/await
const readData = async (filePath) => {
const content = await fs.promises.readFile(filePath, "utf8");
return JSON.parse(content);
};
✍️ Exercices de la leçon
2 exercicesFais-les dans l'ordre, dans un vrai fichier .py — pas dans ta tête. Ne déplie la correction qu'après avoir écrit quelque chose, même faux.
Exercice A — Un script Node qui traite des fichiers
Application directe · Tu appliques ce que tu viens de lire.
Écris un script traiter.js qui :
- 1.lit un dossier
data/et liste tous les fichiers.json - 2.pour chacun, charge le contenu et extrait deux champs de ton choix
- 3.écrit un
resultats.jsonagrégé, formaté lisiblement - 4.affiche un résumé : nombre de fichiers traités, nombre en erreur
- 5.ne s'interrompt pas si un fichier est corrompu — il le signale et continue
Ajoute les scripts npm start et dev dans le package.json, et utilise path.join pour que ça fonctionne sur Windows comme sur Linux.
Exercice B — Le serveur qui se fige
Page blanche · Aucun squelette : à toi de choisir la méthode.
Page blanche. Diagnostic.
Ce serveur répond normalement, sauf quand quelqu'un appelle /rapport : pendant 8 secondes, il ne répond plus à aucune requête — même pas à /sante, qui ne fait rien.
import express from "express";
import { readFileSync } from "node:fs";
const app = express();
app.get("/sante", (req, res) => res.json({ ok: true }));
app.get("/rapport", (req, res) => {
const brut = readFileSync("gros-fichier.json", "utf8"); // 400 Mo
const donnees = JSON.parse(brut);
const total = donnees.reduce((s, d) => s + d.montant, 0);
res.json({ total, lignes: donnees.length });
});
app.listen(3000);
- 1.explique pourquoi
/santecesse de répondre alors qu'elle ne fait rien - 2.identifie les deux opérations bloquantes de
/rapport - 3.corrige la première
- 4.la seconde ne se corrige pas de la même façon — explique pourquoi, et donne deux stratégies
- 5.écris le test qui prouve la correction
Le point 4 est le cœur. Passer en asynchrone ne résout pas tout.