đ©âđ« Express 102 : without Express
Objectifs
- Découvrir le module
node:http. - Créer une application serveur sans Express.
Pré-requis
- 1
Valider la quĂȘte suivante
QuĂȘtes liĂ©es - 2
Ătre Ă l'aise avec l'architecture client-serveur du web

- 3
Identifier les 3 étapes pour créer une application serveur avec Express
javascript// CrĂ©ation de l'application Express const express = require('express'); const app = express(); // DĂ©claration des routes const sayHello = (req, res) => { res.send("Hello World!"); }; app.get("/", sayHello); // Ăcoute du port const port = 3310; app.listen(port, () => { console.log(`Example app listening on port ${port}`); });
Introduction
Tu penses de plus en plus à ce qui se passe en coulisses lorsque tu navigues sur le Web ? Découvrons ensemble le fonctionnement des serveurs web et comment en créer un sans utiliser Express.
Lorsque tu navigues sur le web, chaque fois que tu accĂšdes Ă une page web, ton navigateur envoie une requĂȘte Ă un serveur, puis le serveur renvoie une rĂ©ponse avec le contenu de la page que tu souhaites voir. C'est ainsi que fonctionne l'architecture client-serveur du web.
Un serveur sans Express
Commence par créer un nouveau répertoire pour ton projet et accÚde-y dans ton terminal :
mkdir hello-http
cd hello-http
Créé un fichier package.json pour ton application :
npm init
Crée un fichier index.js (vide pour l'instant) :
touch index.js
Création de l'application serveur
Dans ton fichier index.js, importe le module node:http pour créer un serveur HTTP :
const http = require("node:http");
const app = http.createServer();
Nous importons le module node:http qui nous permet de créer un serveur HTTP. Ensuite, nous initialisons notre serveur avec la fonction createServer().
Cette étape est trÚs similaire à la création d'une application Express :
const express = require("express");
const app = express();
Rien de trÚs intéressant pour l'instant.
Déclaration des routes
Chaque fois que notre serveur reçoit une requĂȘte HTTP, il doit exĂ©cuter une fonction spĂ©cifique pour produire la rĂ©ponse. Cette fonction, appelĂ©e gestionnaire de requĂȘtes, est dĂ©finie Ă l'aide de la mĂ©thode on() :
const handleRequest = (req, res) => {
res.end("Hello World!");
};
app.on("request", handleRequest);
LĂ encore, le code ressemble Ă ce que tu as pu voir avec Express :
const sayHello = (req, res) => {
res.send("Hello World!");
};
app.get("/", sayHello);
Nous reviendrons sur cette partie un peu plus tard.
Ăcoute du port
Le code est cette fois complĂštement identique dans les 2 cas :
const port = 3310;
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
Sauvegarde ton fichier index.js, et lance ton application avec la commande suivante dans ton terminal :
node --watch index.js
Le port 3310 peut ĂȘtre dĂ©jĂ utilisĂ© par une autre application sur ta machine. Si c'est le cas, essaie une autre valeur (8080 ?) et relance la commande nodemon index.js.
Tu peux ensuite ouvrir ton navigateur Ă l'adresse http://localhost:3310/ pour voir le message "Hello World!" s'afficher.
Afficher le code complet|||js|||Besoin d'aide ?|||0|||Masquer
// Création de l'application serveur
const http = require("node:http");
const app = http.createServer();
// Déclaration des routes
const handleRequest = (req, res) => {
res.end("Hello World!");
};
app.on("request", handleRequest);
// Ăcoute du port
const port = 3310;
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
Plusieurs requĂȘtes, une seule rĂ©ponse
Actuellement, notre serveur renvoie la mĂȘme rĂ©ponse pour toutes les requĂȘtes. Tu peux t'en rendre compte en affichant l'URL demandĂ©e dans la console :
const handleRequest = (req, res) => {
console.log(req.url);
res.end("Hello World!");
};
AprÚs avoir sauvegardé ton fichier index.js, ouvre ces liens dans ton navigateur (en adaptant le port au besoin) :
Si le message dans ta console affiche des URLs diffĂ©rentes pour chaque requĂȘte, la rĂ©ponse est toujours la mĂȘme : Hello World!.
Adapter la rĂ©ponse Ă la requĂȘte
Lorsque nous crĂ©ons un serveur HTTP avec le module node:http, nous avons la flexibilitĂ© de dĂ©finir notre propre logique pour rĂ©pondre aux diffĂ©rentes requĂȘtes. Dans l'exemple ci-dessous, nous utilisons une structure conditionnelle pour router les requĂȘtes vers diffĂ©rentes rĂ©ponses en fonction de l'URL demandĂ©e :
const http = require("node:http");
const app = http.createServer();
const handleRequest = (req, res) => {
console.log(req.url);
if (req.url === "/") {
res.end("Hello World!");
} else if (req.url === "/about") {
res.end("About World!");
} else {
res.end("Not Found");
}
};
app.on("request", handleRequest);
const port = 3310;
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
Dans cet exemple, chaque requĂȘte est dirigĂ©e vers la fonction handleRequest, qui vĂ©rifie l'URL de la requĂȘte et envoie une rĂ©ponse appropriĂ©e : plus l'application comptera de routes, plus cette fonction va devenir complexe.
En revanche, avec Express, la gestion des routes est simplifiĂ©e Ă l'aide de mĂ©thodes spĂ©cifiques comme app.get(), app.post(), etc. pour dĂ©clarer les routes et spĂ©cifier les gestionnaires de requĂȘte associĂ©s. Voici comment l'exemple prĂ©cĂ©dent serait implĂ©mentĂ© avec Express :
const express = require("express");
const app = express();
// Gestionnaire de requĂȘte pour la route "/"
app.get("/", (req, res) => {
res.send("Hello World!");
});
// Gestionnaire de requĂȘte pour la route "/about"
app.get("/about", (req, res) => {
res.send("About World!");
});
// Gestionnaire de requĂȘte pour toutes les autres routes
app.use((req, res) => {
res.sendStatus(404);
});
const port = 3310;
app.listen(port, () => {
console.log(`Server is listening on port ${port}`);
});
Avec Express, nous pouvons dĂ©finir des gestionnaires de requĂȘte spĂ©cifiques pour chaque route. Cette approche simplifie la gestion des routes et rend le code plus lisible et modulaire.
Félicitations !
Tu as maintenant créé un serveur web fonctionnel sans utiliser Express. Continue d'explorer les possibilités offertes par les modules node, comme node:fs pour manipuler les fichiers par exemple, et amuse-toi à expérimenter avec la création d'applications console.
Ressources partagĂ©es sur cette quĂȘte
- A partir de la 17Úme minute, un trÚs bon exemple permettant de mieux comprendre comment faire le challenge si des difficultés sont rencontrées.https://www.youtube.com/watch?v=HLPHoY-h7vc
- De quoi est fait un serveur (device and software)https://youtu.be/UjCDWCeHCzY
- A quoi ressemble un serveur (device), concrĂštement, dans un datacenter ?https://youtu.be/rO6bXt7d2L8
- Qu'est-ce qu'un serveur ? (en français)https://www.youtube.com/watch?v=fstuiXu1QsQ