Node-Js
Debutant
Quiz-Nodejs-Debutant
Nodejs-Modules
Commonjs
Esm
Npm-Scripts
Callbacks
Eventemitter
Questions-Entretien-Nodejs
Qcm-Nodejs
Backend-Javascript
Nodejs-Runtime
V8-Engine
📝
Entretien Node.js Débutant — Modules, NPM et Callbacks
20 questions sur les bases de Node.js : modules CommonJS/ESM, NPM, scripts, callbacks, événements (EventEmitter) et le runtime JavaScript côté serveur. Idéal pour un premier entretien backend.
Banque de révision : les 25 questions corrigées
Voici l'intégralité des 25 questions de « Entretien Node.js Débutant — Modules, NPM et Callbacks », chacune avec sa bonne réponse et son explication. Le quiz interactif ci-dessus en tire une sélection aléatoire à chaque tentative — utilisez cette liste complète pour réviser.
Explication :
Node.js est un environnement d'exécution JavaScript construit sur le moteur JavaScript V8 de Chrome. Il permet d'exécuter JavaScript côté serveur, en dehors du navigateur.
Node.js a été créé par Ryan Dahl en 2009. Il utilise un modèle asynchrone et piloté par les événements.
Explication :
Les deux commandes fonctionnent :
node --version et node -v affichent la version de Node.js installée sur votre système.
Utilisez
node -v pour la forme courte, ou npm -v pour vérifier la version de npm (Node Package Manager).
Explication :
La commande
node app.js exécute le fichier JavaScript avec Node.js. Node.js compile et exécute le code contenu dans le fichier.
Assurez-vous d'être dans le bon répertoire contenant le fichier avant d'exécuter la commande.
Explication :
npm est le gestionnaire de paquets par défaut pour Node.js. Il permet d'installer, gérer et partager des bibliothèques et des outils JavaScript. C'est le plus grand registre de paquets au monde.
npm est automatiquement installé avec Node.js. Utilisez
npm init pour créer un nouveau projet.
Explication :
La commande
npm init crée un fichier package.json interactif. Pour une création rapide avec les valeurs par défaut, utilisez npm init -y.
Le fichier
package.json est essentiel : il contient les métadonnées du projet, les dépendances, et les scripts.
Explication :
npm install express --save installe express et l'ajoute à la section dependencies du package.json. Depuis npm 5, npm install express fait la même chose par défaut, mais --save est explicite.
Utilisez
--save-dev (ou -D) pour les dépendances de développement (testing, linting, etc.).
Explication :
Le dossier
node_modules contient toutes les bibliothèques et dépendances installées via npm. Il est généralement exclu du contrôle de version (dans .gitignore) car il peut être régénéré avec npm install.
Ne modifiez jamais manuellement les fichiers dans
node_modules. Utilisez npm pour gérer les dépendances.
Explication :
Node.js supporte deux systèmes de modules : CommonJS (
require()) et ES modules (import). Par défaut, les anciens projets utilisent require(), les nouveaux peuvent utiliser import avec "type": "module" dans package.json.
Le module
fs (file system) permet de lire, écrire et manipuler des fichiers.
Explication :
Le module
http permet de créer des serveurs HTTP et d'effectuer des requêtes HTTP. C'est la base sur laquelle des frameworks comme Express sont construits.
Exemple minimal :
http.createServer((req, res) => res.end("Hello")).listen(3000);
Explication :
Les callbacks sont des fonctions passées en paramètre qui sont exécutées plus tard, généralement après qu'une opération asynchrone soit terminée (lecture de fichier, requête réseau, etc.).
Le pattern classique :
fs.readFile("fichier.txt", (err, data) => { if (err) throw err; console.log(data); });
Explication :
Node.js utilise une boucle d'événements (event loop). Quand une opération d'E/S est lancée, Node.js continue d'exécuter d'autres code et revient quand l'opération est terminée. Cela évite de bloquer le thread principal.
C'est ce qui rend Node.js très performant pour les applications I/O intensives (API, chat, streaming).
Explication :
fs.readFile() est la version asynchrone. Elle prend un callback qui sera appelé avec les données (ou une erreur). La version synchrone est fs.readFileSync().
Préférez les versions asynchrones dans les applications serveur pour ne pas bloquer l'event loop.
Explication :
process.argv est un tableau contenant les arguments de ligne de commande. process.argv[0] est le chemin de Node.js, process.argv[1] est le chemin du script, et les arguments suivants sont dans process.argv[2], etc.
Exemple :
node monScript.js arg1 arg2 → process.argv[2] === "arg1"
Explication :
La méthode
http.createServer() prend un callback avec les objets request et response. server.listen(port) démarre le serveur sur le port spécifié.
Pour des applications réelles, utilisez Express qui simplifie grandement le routage et la gestion des requêtes.
Explication :
global est l'objet global dans Node.js. Les variables déclarées sans var, let ou const deviennent des propriétés de global, mais c'est une mauvaise pratique.
Contrairement aux navigateurs, les variables déclarées avec
var dans un module ne sont pas ajoutées à global. Chaque module a sa propre portée.
Explication :
Les variables d'environnement sont accessibles via l'objet
process.env. Exemple : const port = process.env.PORT || 3000;
Utilisez le package
dotenv pour charger des variables d'environnement depuis un fichier .env.
Explication :
npm ci (Continuous Integration) est conçu pour les environnements CI/CD. Il efface node_modules, utilise le package-lock.json exactement, et échoue si les versions ne correspondent pas. C'est plus rapide et reproductible.
Utilisez
npm ci dans vos pipelines CI/CD et npm install en développement.
Explication :
Le module
path fournit des méthodes pour travailler avec les chemins de fichiers : path.join(), path.resolve(), path.basename(), path.dirname(), path.extname(), etc.
Utilisez
path.join(__dirname, "dossier", "fichier.txt") pour construire des chemins cross-platform.
Explication :
__dirname est une variable globale qui représente le chemin absolu du répertoire contenant le module actuel. Très utile pour construire des chemins relatifs aux fichiers. __filename donne le chemin complet du fichier, y compris son nom.
Explication :
process.exit(code) termine le processus Node.js avec le code de sortie spécifié. 0 signifie succès, tout autre code (1, 2, etc.) indique une erreur.
Laissez le processus se terminer naturellement quand c'est possible. Utilisez
process.exit() seulement pour les erreurs fatales.
Explication :
Le "callback hell" se produit quand de nombreuses opérations asynchrones sont imbriquées les unes dans les autres, créant une structure pyramidale difficile à lire, déboguer et maintenir.
Solutions : utiliser des Promises (
then()/catch()), async/await, ou des bibliothèques comme async.js.
Explication :
Depuis Node.js 10,
fs.promises fournit des versions Promise de toutes les méthodes fs. Sinon, util.promisify(fs.readFile) convertit une fonction callback en Promise.
Exemple :
const data = await fs.promises.readFile("file.txt", "utf8");
Explication :
L'Event Loop est le cœur de Node.js. Il permet de gérer les opérations asynchrones sans avoir besoin de threads multiples. Il surveille la file d'attente des événements et exécute les callbacks quand ils sont prêts.
Les opérations lourdes (calcul CPU intensif) peuvent bloquer l'event loop. Utilisez des Worker Threads pour ces cas.
Explication :
Le pattern "error-first callback" est standard en Node.js. Le premier argument du callback est réservé à l'erreur (ou null s'il n'y a pas d'erreur). Exemple :
fs.readFile(file, (err, data) => { if (err) { console.error(err); return; } });
Avec les Promises et async/await, utilisez
try/catch pour les erreurs asynchrones.
Explication :
npm start exécute la commande définie dans la section "scripts": { "start": "node app.js" } du package.json. Par défaut, npm start exécute node server.js. node app.js exécute directement le fichier.
Les scripts npm sont très utiles pour standardiser les commandes :
npm run dev, npm test, etc.