Votre premier serveur web avec Node.js et Express
Par Laurent Millotte, développeur et formateur web. Publié le 5 juin 2026, mis à jour le 10 août 2026. Mon expérience en accessibilité numérique et développement web
Article 4 sur 4, série Parcours débutant : du navigateur au serveur
Un serveur web reçoit une requête, puis renvoie une réponse. Ici, vous écrivez votre premier serveur avec Node.js pour l’exécuter et Express pour simplifier l’écriture des routes.
Que fait un serveur, au juste ?
Un serveur web attend une requête, puis renvoie une réponse : c’est tout son travail, répété en boucle.
Quand vous saisissez une adresse dans votre navigateur, celui-ci envoie une requête. Cette requête suit le protocole HTTP (HyperText Transfer Protocol, protocole de transfert hypertexte), un langage commun aux navigateurs et aux serveurs. Le serveur reçoit la requête, choisit quoi renvoyer, puis expédie une réponse.
L’objectif de cet article est d’écrire le programme qui tient ce rôle.
Pourquoi utiliser Express plutôt que Node.js seul ?
Node.js gère le réseau tout seul, mais écrire un serveur avec ses seules fonctions demande du code répétitif : il faut lire l’adresse demandée, la comparer à la main, puis brancher la bonne réponse.
Voici la même route, écrite d’abord avec le module natif de Node.js, puis avec Express.
Avec le module natif http, sans aucune brique externe :
const http = require("http");const server = http.createServer((req, res) => {if (req.url === "/") {res.end("Bonjour le monde !");}});server.listen(3000, () => {console.log("Serveur démarré sur http://localhost:3000");});
Ce code fonctionne, mais il vieillit mal. Ajoutez une deuxième route, et le if se transforme en if / else if / else. Ajoutez-en dix, et le fichier devient difficile à relire.
Avec Express, une brique installable via npm (Node Package Manager, gestionnaire de paquets de Node.js) :
const express = require("express");const app = express();app.get("/", (req, res) => {res.send("Bonjour le monde !");});app.listen(3000, () => {console.log("Serveur démarré sur http://localhost:3000");});
La comparaison des deux blocs montre ce qu’Express change réellement : app.get("/", ...) remplace le test manuel sur req.url. Chaque route s’ajoute alors comme une ligne de plus, sans toucher aux précédentes.
Cet article utilise Express 4, la branche la plus répandue et celle que la commande require("express") suppose. Une version plus récente, Express 5, existe aussi depuis décembre 2025, avec une syntaxe d’import différente. On installe Express ainsi :
npm install express
Un serveur en quelques lignes, décortiqué
Reprenons le code Express ligne par ligne, plutôt que de le copier sans le lire : c’est en comprenant chaque morceau qu’il devient réutilisable dans vos propres projets.
La première ligne importe la brique Express installée précédemment. La deuxième crée l’application.
La méthode app.get définit une route : « lorsqu’un visiteur demande l’adresse /, voici la réponse à lui renvoyer ». La fonction reçoit deux objets par convention, req pour la requête, ce que demande le visiteur, et res pour la réponse, ce qu’on lui renvoie. Ici, la réponse est un simple texte.
Enfin, app.listen(3000, ...) met le serveur à l’écoute sur le port 3000. À partir de cet appel, le serveur attend les visiteurs.
Enregistrez ce code dans un fichier nommé serveur.js, puis lancez-le avec la commande node serveur.js.

Le terminal après le lancement du serveur.
Ouvrez ensuite http://localhost:3000 dans votre navigateur : le message s’affiche. Vous venez de servir une page depuis un programme que vous avez écrit de bout en bout.
Trois pistes pour prolonger ce serveur
Trois évolutions concrètes prolongent ce serveur minimal : une nouvelle route, une réponse structurée pour une interface de programmation applicative, une connexion à une base de données.
Ajouter une route /contact suit exactement le modèle vu plus haut, avec une deuxième instruction app.get :
app.get("/contact", (req, res) => {res.send("Écrivez-moi à contact@exemple.fr");});
Renvoyer des données structurées, au lieu d’un texte, prépare le terrain pour une API consommée par une application mobile ou par un autre site. Brancher une base de données ajoute une brique de plus, cherchée et installée de la même façon qu’Express.
Cette série a suivi un chemin volontairement concret : les bases du langage JavaScript, puis Node.js, puis ce serveur. Mon avis : la meilleure étape suivante n’est pas un nouveau cours. Elle est votre prochain projet, même petit.
Si vous préférez être accompagné plutôt qu’avancer seul sur ces bases, une formation JavaScript et Node.js reprend ces notions avec un formateur, à votre rythme.