Le module HTTP de Node.js sait écouter sur un port et rien de plus. Lire un corps de requête, distinguer deux URL, renvoyer du JSON : tout est à écrire à la main.
Express apporte exactement ces pièces manquantes, sans en ajouter beaucoup d'autres.
Définition
Express est un cadre minimal pour construire un serveur HTTP en Node.js. Il fournit un routeur, une chaîne de traitements appelés middlewares, et des raccourcis posés sur la requête et la réponse. Le reste, base de données ou authentification, reste à choisir librement.
import express from "express";
const app = express();
app.use(express.json());
app.get("/factures/:id", (req, res) => {
const facture = factures.get(req.params.id);
if (!facture) {
return res.status(404).json({ erreur: "Introuvable" });
}
res.json(facture);
});
app.listen(3000);Quatorze lignes suffisent à servir une ressource, à traiter le cas absent et à répondre en JSON. Le :id de l'URL devient une propriété de req.params, sans analyse de chaîne à écrire.
Le middleware, la seule idée à comprendre
Un middleware est une fonction qui reçoit la requête, la réponse et la main pour passer au suivant. Ils s'exécutent dans l'ordre de déclaration, ce qui fait de cet ordre une décision de conception à part entière.
app.use((req, res, next) => {
console.log(req.method, req.url);
next(); // sans cet appel, la requête reste suspendue
});
app.use((err, req, res, next) => {
console.error(err);
res.status(500).json({ erreur: "Erreur interne" });
});Le second exemple se distingue par un détail invisible à la lecture rapide : il prend quatre paramètres. Express s'en sert pour le reconnaître comme gestionnaire d'erreurs, et ne l'appelle que lorsqu'un traitement précédent a échoué.
Ce qu'Express pose sur la requête
| Propriété | Ce qu'elle contient |
|---|---|
| req.params | Les segments variables de l'URL |
| req.query | Les paramètres écrits après le point d'interrogation |
| req.body | Le corps analysé, si un middleware l'a préparé |
| res.status | Le code de réponse, à enchaîner avant l'envoi |
| res.json | La réponse sérialisée, en-tête compris |
req.body vaut undefined tant que express.json() n'a pas été déclaré. C'est de loin la surprise la plus fréquente des premières heures avec Express.
Questions fréquentes
Express est-il encore pertinent ?
Il reste le socle le plus répandu de l'écosystème Node, et cette position vaut de l'argent : documentation, réponses, extensions pour à peu près tout. Des concurrents plus récents rendent de meilleures performances ou une validation intégrée, mais aucun n'approche cette masse de ressources.
Comment attraper une erreur asynchrone ?
Une Promise rompue dans une route ne remonte pas toute seule au gestionnaire d'erreurs sur les versions 4. Il faut l'y renvoyer explicitement, avec un try et un appel à next(err), ou en enveloppant la route dans une fonction qui le fait à votre place. La version 5 corrige ce comportement.
Faut-il Express avec Next.js ?
En général non : Next.js sert déjà ses propres routes de données, et ajouter un serveur devant complique le déploiement. Express garde son intérêt quand une API existe déjà, ou quand il faut un traitement que le framework ne couvre pas, comme un flux permanent ou un protocole particulier.