Leçon 3 / 15

Lire les requêtes et formater les réponses

35 min Node.js — API Express et code asynchrone Gratuit

Objectif : Recevoir des données JSON et renvoyer des réponses cohérentes depuis Express.

Une route peut être joignable et pourtant difficile à utiliser si elle ne sait pas lire le JSON envoyé par le client ou si chaque réponse adopte une forme différente. Vous allez configurer Express pour recevoir un corps JSON, distinguer les informations placées dans l’URL de celles placées après un point d’interrogation, puis appliquer un format commun aux réponses.

Vous avez déjà créé l’application Express et démarré le serveur dans la première leçon. Ici, vous modifiez `serveur.js` en conservant le port configurable et la route temporaire `/controle` ; les routes métier restent provisoires dans ce fichier, avant leur organisation dans des fichiers distincts lors des prochaines leçons.

Lire les corps JSON avec express.json

Un client transmet souvent les champs d’une création dans le corps de sa requête HTTP. Le middleware intégré `express.json()` analyse un corps JSON et le rend accessible dans `req.body`. Placez-le avant les routes qui doivent lire ces données : sinon, celles-ci s’exécutent avant l’analyse du corps.

Lire les informations présentes dans l’URL

Les paramètres de route sont les segments variables définis dans le chemin, comme `:id` dans `/api/commandes/:id`. Express place leur valeur dans `req.params` : pour `/api/commandes/42`, `req.params.id` vaut la chaîne `"42"`. Les paramètres de requête suivent le `?`, par exemple `?statut=en-attente`, et se lisent dans `req.query` sous forme de chaînes.

Dans l’exemple, la liste renvoie temporairement les filtres reçus afin que vous puissiez vérifier leur lecture. Une route de détail renvoie l’identifiant capturé, tandis que la création renvoie le corps reçu. Ces réponses illustrent le transport des données, pas encore la recherche ni l’enregistrement effectifs d’une commande.

Remplacer serveur.js

Remplacez le contenu de `serveur.js` par ce fichier complet. Chaque réponse utilise les mêmes clés : `donnees` contient le résultat, et `erreur` vaut `null` lorsqu’aucune erreur n’est signalée. Le code conserve la route de contrôle afin que vous puissiez continuer à vérifier que le serveur répond.

JavaScript
const express = require('express');

const app = express();
const port = process.env.PORT || 3000;

app.use(express.json());

app.get('/controle', (req, res) => {
  res.json({
    donnees: { message: 'Le serveur Express répond.' },
    erreur: null
  });
});

app.get('/api/commandes', (req, res) => {
  res.json({
    donnees: {
      filtres: {
        statut: req.query.statut || null,
        produitId: req.query.produitId || null
      }
    },
    erreur: null
  });
});

app.get('/api/commandes/:id', (req, res) => {
  res.json({
    donnees: { id: req.params.id },
    erreur: null
  });
});

app.post('/api/commandes', (req, res) => {
  res.status(201).json({
    donnees: req.body,
    erreur: null
  });
});

app.listen(port, () => {
  console.log(`Serveur démarré sur le port ${port}`);
});
Aperçu du rendu
Chargement de l'aperçu…

Vérifier les réponses avec curl

Démarrez le serveur avec `npm start`, puis essayez les requêtes suivantes dans un autre terminal. Pour la création, `-H` ajoute l’en-tête JSON et `-d` transmet un corps de requête ; les deux autres exemples vérifient la lecture des paramètres d’URL.

Terminal
curl 'http://localhost:3000/api/commandes?statut=en-attente&produitId=7'
curl 'http://localhost:3000/api/commandes/42'
curl -X POST 'http://localhost:3000/api/commandes' \
  -H 'Content-Type: application/json' \
  -d '{"produitId":7,"quantite":2}'

La première réponse contient les filtres sous forme de chaînes, avec `null` pour les filtres absents. La deuxième renvoie l’identifiant capturé dans le chemin. La troisième renvoie le corps JSON reçu et utilise le statut `201` pour signaler la création ; le contrat des statuts HTTP a été posé dans la leçon précédente.

JSON
{"donnees":{"filtres":{"statut":"en-attente","produitId":"7"}},"erreur":null}
{"donnees":{"id":"42"},"erreur":null}
{"donnees":{"produitId":7,"quantite":2},"erreur":null}

À retenir

  • Placez `app.use(express.json())` avant les routes qui lisent un corps JSON.
  • Lisez les segments variables du chemin dans `req.params` et les filtres après `?` dans `req.query`.
  • Un corps JSON analysé par Express est accessible dans `req.body`.
  • Renvoyez systématiquement un objet avec `donnees` et `erreur`, y compris lorsqu’aucune erreur n’est présente.

Dans la prochaine leçon, vous déplacerez les routes provisoires vers une organisation dédiée par ressource.

Envie d'aller plus loin ?

Les cours Enovatic sont gratuits et le resteront. Si vous cherchez un accompagnement encadré, nos formations professionnelles sont animées par les mêmes formateurs.