Kodokon kodokon.com

Express : routes et middlewares

Installez Express et structurez votre premier serveur avec des routes, des paramètres d'URL et des middlewares.

9 min · 3 questions

Ouvrir cette leçon dans Kodokon

Vous savez déjà lancer un serveur avec le module http natif : tout y est manuel, de la lecture de l'URL à la composition des en-têtes. Express est le framework qui a standardisé le développement web côté Node : routage, middlewares, API concise, sans rien cacher du protocole. Créez un projet et installez-le.

BASH
mkdir kodokon-api
cd kodokon-api
npm init -y
npm install express

Ajoutez la propriété type avec la valeur module dans votre package.json : tout le projet utilisera les modules ES. Créez ensuite server.js. Quelques lignes suffisent pour un serveur fonctionnel : on crée l'application, on déclare une route, on écoute un port.

JAVASCRIPT
import express from "express";

const app = express();

app.get("/", (req, res) => {
  res.send("API Kodokon en ligne");
});

app.listen(3000, () => {
  console.log("http://localhost:3000");
});
server.js - lancez-le avec node server.js

Une route associe une méthode HTTP et un chemin à une fonction. Les segments dynamiques se déclarent avec deux points : dans /users/:id, la valeur est disponible dans req.params.id. Les paramètres de requête (?q=node) arrivent eux dans req.query. Retenez la distinction : le chemin identifie la ressource, la query string affine la demande.

JAVASCRIPT
app.get("/users/:id", (req, res) => {
  const { id } = req.params;
  res.json({ id, name: "Utilisateur " + id });
});

app.get("/search", (req, res) => {
  const { q } = req.query;
  res.json({ query: q ?? "" });
});

Un middleware est une fonction qui s'exécute entre la réception de la requête et votre route. Sa signature : (req, res, next). Il peut enrichir req, répondre directement, ou passer la main avec next(). Express n'est au fond qu'une chaîne de middlewares : journalisation, authentification, parsing du corps. Celui-ci journalise chaque requête avec sa durée :

JAVASCRIPT
app.use((req, res, next) => {
  const start = Date.now();
  res.on("finish", () => {
    const ms = Date.now() - start;
    console.log(`${req.method} ${req.url} ${ms}ms`);
  });
  next();
});
À déclarer avant les routes pour tout journaliser

Quiz de validation

Vérifiez que vous avez bien retenu les points clés de cette leçon.

  1. Une route est déclarée avec le chemin /users/:id. Où récupérez-vous la valeur de id ?
    • Dans req.query.id
    • Dans req.params.id
    • Dans req.body.id
  2. Dans un middleware Express, à quoi sert l'appel next() ?
    • À renvoyer la réponse au client
    • À passer la main au middleware ou à la route suivante
    • À redémarrer le serveur
    • À annuler la requête en cours
  3. Que devez-vous ajouter à package.json pour utiliser la syntaxe import dans Node.js ?
    • La propriété type réglée sur module
    • La propriété esm réglée sur true
    • Rien, c'est le comportement par défaut