Node-Js
Junior
Quiz-Nodejs-Junior
Express-Js
Middleware
Api-Rest
Nodejs-Routing
Questions-Entretien-Nodejs-Junior
Qcm-Nodejs-Junior
Gestion-Erreurs
Backend-Rest
Javascript
Back-End
Rest
📝
Entretien Node.js Junior — Express, REST et Middleware
20 questions Node.js niveau junior : Express.js, middleware, création d'API REST, routing, gestion des erreurs HTTP et bonnes pratiques backend. Parfait pour un entretien Node.js Junior.
Banque de révision : les 25 questions corrigées
Voici l'intégralité des 25 questions de « Entretien Node.js Junior — Express, REST et Middleware », 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 utilise un seul thread principal avec une boucle d'événements (event loop) pour gérer les opérations asynchrones. Cela permet de traiter des milliers de connexions simultanées sans créer de thread par connexion.
Cette architecture rend Node.js particulièrement adapté aux applications I/O intensives (API, chat, streaming), mais pas aux calculs CPU intensifs.
Explication :
Express est le framework web le plus populaire pour Node.js. On instancie l'application avec
express(), on définit des routes avec app.get(), app.post(), etc., et on démarre le serveur avec app.listen().
Installez Express avec
npm install express. C'est beaucoup plus simple que le module http natif.
Explication :
res.send() est une méthode d'Express qui envoie une réponse au client. Elle peut envoyer du texte, du JSON, du HTML, des buffers, etc. Elle définit automatiquement le Content-Type approprié.
Pour envoyer du JSON spécifiquement, utilisez
res.json(). Pour un fichier, utilisez res.sendFile().
Explication :
req.query contient les paramètres de l'URL après le ?. Exemple : GET /users?page=2&limit=10 donne req.query = { page: "2", limit: "10" }.
Les paramètres d'URL (ex:
/users/:id) sont dans req.params. Le corps d'une requête POST/PUT est dans req.body (nécessite un middleware comme express.json()).
Explication :
Les paramètres dynamiques définis avec
: dans la route sont accessibles via req.params. Si la route est /users/:id, req.params.id ou req.params["id"] donne la valeur.
Exemple complet :
app.get("/users/:id", (req, res) => { const id = req.params.id; });
Explication :
Pour parser le JSON du corps d'une requête, vous devez ajouter le middleware
express.json(). Ensuite, les données sont disponibles dans req.body. C'est obligatoire car Express ne parse pas le corps par défaut.
Pour les formulaires URL-encodés, utilisez
express.urlencoded({ extended: true }).
Explication :
En REST, POST est utilisé pour créer une nouvelle ressource. GET est pour lire, PUT/PATCH pour mettre à jour, DELETE pour supprimer.
Bien que ce soit la convention, ce n'est pas obligatoire. Certaines API utilisent POST pour tout, mais ce n'est pas recommandé.
Explication :
Toutes ces méthodes fonctionnent.
res.status(404).send() permet de personnaliser le message. res.sendStatus(404) envoie automatiquement "Not Found". res.status(404).json() envoie du JSON. res.status() chaîne les méthodes. N'oubliez pas d'appeler send(), json(), ou end() après.
Explication :
Un middleware est une fonction qui s'exécute entre la réception de la requête et l'envoi de la réponse. Il peut exécuter du code, modifier req/res, terminer le cycle, ou appeler
next() pour passer au middleware suivant.
Exemples : logging, authentification, parsing de corps, compression, gestion CORS.
Explication :
next() appelle le prochain middleware dans la pile. Sans next(), la requête reste bloquée. Si vous ne voulez pas passer au suivant, vous devez envoyer une réponse (res.send()).
Pour passer une erreur, appelez
next(err). Cela déclenche le gestionnaire d'erreurs.
Explication :
Le middleware
express.static() sert les fichiers statiques d'un dossier. Exemple : app.use(express.static("public")) rend accessible tous les fichiers du dossier public.
Placez vos fichiers CSS, JS client, images dans le dossier public. Un fichier
public/style.css sera accessible à /style.css.
Explication :
Nodemon surveille les fichiers du projet et redémarre automatiquement l'application quand un fichier change. C'est très utile en développement pour ne pas avoir à redémarrer manuellement le serveur.
Installez-le avec
npm install -g nodemon ou npm install --save-dev nodemon, puis lancez avec nodemon app.js.
Explication :
Le flag
--save-dev (ou -D) installe le package dans devDependencies de package.json. Ces packages ne sont pas installés en production (NODE_ENV=production).
Exemples de devDependencies : testing (jest, mocha), linting (eslint), compilation (typescript), nodemon.
Explication :
npm run nom-script exécute la commande définie dans "scripts": { "nom-script": "commande" } du package.json. Exemples : npm start (raccourci pour npm run start), npm test.
Les scripts npm sont parfaits pour standardiser les commandes d'un projet : build, test, dev, start, lint.
Explication :
Sur Linux/Mac :
PORT=3000 node app.js. Sur Windows : set PORT=3000 && node app.js. La commande env fonctionne aussi sur Unix. Utilisez cross-env pour une solution multiplateforme.
Pour un projet, utilisez le package
dotenv qui charge les variables depuis un fichier .env.
Explication :
Les variables d'environnement sont accessibles via l'objet
process.env. Exemple : const port = process.env.PORT || 3000; utilise la variable PORT ou 3000 par défaut.
Pensez toujours à fournir des valeurs par défaut pour éviter les erreurs si les variables ne sont pas définies.
Explication :
Historiquement,
request était populaire mais déprécié. axios est très utilisé pour ses fonctionnalités avancées. Depuis Node.js 18, fetch est natif (expérimental depuis Node 17).
Pour les nouveaux projets, utilisez
fetch (natif) ou axios (plus de fonctionnalités : intercepteurs, annulation).
Explication :
package-lock.json enregistre les versions exactes de toutes les dépendances et sous-dépendances. Il garantit que npm install installe exactement les mêmes versions sur toutes les machines.
Commitez
package-lock.json dans votre dépôt Git. Il assure la reproductibilité des installations.
Explication :
Toutes ces commandes sont des alias :
npm uninstall, npm remove, npm rm font la même chose. Elles suppriment le package de node_modules et de package.json.
Ajoutez
--save-dev si vous voulez le supprimer des devDependencies, ou -g pour un package global.
Explication :
Dans une route asynchrone, utilisez
try/catch et appelez next(err) pour passer l'erreur au gestionnaire d'erreurs d'Express. Pour les routes async, utilisez un wrapper comme express-async-errors ou gérez manuellement.
Définissez un middleware d'erreur à la fin :
app.use((err, req, res, next) => { res.status(500).send("Erreur"); });
Explication :
CORS (Cross-Origin Resource Sharing) est un mécanisme de sécurité. Le middleware
cors ajoute les en-têtes nécessaires pour permettre à une API d'être appelée depuis un autre domaine (front-end sur un port différent).
Installez avec
npm install cors, puis utilisez app.use(cors()) pour autoriser toutes les origines (développement uniquement).
Explication :
Le
express.Router() permet de créer des routeurs modulaires. On définit les routes dans des fichiers séparés (ex: users.js, products.js) et on les monte avec app.use("/users", userRouter).
Structure recommandée : routes/users.js, routes/products.js, controllers/usersController.js, models/User.js.
Explication :
npm update met à jour les packages dans les limites définies par package.json (ex: ^1.2.3 met à jour vers 1.x.x mais pas 2.0.0). Pour mettre à jour vers les dernières majeures, utilisez npm install package@latest ou un outil comme npm-check-updates.
Exécutez
npm outdated pour voir quels packages ont des versions plus récentes.
Explication :
process.on("uncaughtException") capture les erreurs non gérées. Cependant, après une telle erreur, l'état de l'application est incertain. La meilleure pratique est de logger l'erreur puis de redémarrer le processus (avec un process manager comme PM2).
Utilisez
process.on("unhandledRejection") pour les promesses rejetées non gérées.
Explication :
PM2 (Process Manager 2) est un outil de production qui gère les processus Node.js. Il redémarre automatiquement l'application si elle plante, peut exécuter plusieurs instances (cluster mode), gère les logs, et permet des redémarrages sans downtime.
Installez PM2 globalement :
npm install -g pm2. Utilisation : pm2 start app.js, pm2 restart app, pm2 logs.