Introduction
Toute API utile doit recevoir des données du client — un identifiant utilisateur dans l'URL, des options de filtrage dans la query string, ou un corps JSON contenant les données d'un formulaire. Avant de pouvoir construire des endpoints CRUD, vous devez savoir précisément où Express place chaque élément de données entrantes et comment le lire de manière fiable.
Cette leçon passe en revue les trois principales sources d'entrée — paramètres d'URL, query strings et corps de requête — puis met les trois à profit dans un ensemble complet d'endpoints CRUD pour une ressource simple.
Lecture des entrées : paramètres, query strings et corps
Express analyse les données de la requête entrante en trois objets distincts sur l'objet request.
Les paramètres d'URL sont des segments nommés du chemin. Vous les déclarez avec deux-points dans votre définition de route, et Express les rend disponibles sur `req.params`.
Les query strings apparaissent après le point d'interrogation dans une URL, comme `/users?role=admin&limit=10`. Express les analyse automatiquement dans `req.query`.
Le corps de la requête transporte des données structurées envoyées par le client, le plus souvent au format JSON. Express n'analyse pas le corps par défaut — vous devez enregistrer le middleware intégré `express.json()` avant vos routes.
Une fois ce middleware en place, les payloads `POST` et `PUT` sont disponibles sur `req.body`.
Construire une API CRUD complète
Pour rester concentré sur la mécanique du routage, les exemples ci-dessous utilisent un tableau en mémoire comme magasin de données. Dans un vrai projet, vous remplaceriez les opérations sur le tableau par des appels à une base de données.
Commencez par les données et une fonction utilitaire pour générer des identifiants :
Create — `POST /users` lit le corps et ajoute un nouvel enregistrement :
Read all — `GET /users` prend en charge le filtrage optionnel par rôle via la query string :
Read one — `GET /users/:id` utilise `req.params` pour trouver un seul enregistrement :
Update — `PUT /users/:id` combine les paramètres (quel enregistrement) avec le corps (nouvelles valeurs) :
Delete — `DELETE /users/:id` supprime l'enregistrement et renvoie `204 No Content` :
Erreurs courantes
Oublier `express.json()` est la source de confusion la plus fréquente pour les débutants. Si `req.body` est `undefined`, vérifiez que le middleware est bien enregistré et que le client envoie bien un en-tête `Content-Type: application/json`.
Ne pas convertir `req.params.id` en nombre avant de le comparer est un autre bug subtil. Les paramètres de route sont toujours des chaînes de caractères. Comparer la chaîne `"1"` au nombre `1` avec une égalité stricte renverra toujours `false`, donc vos appels à `find` ou `findIndex` manqueront silencieusement chaque enregistrement.
Renvoyer des données après avoir envoyé une réponse provoque un crash de type « headers already sent » dans Express. Utilisez toujours `return` avant les appels à `res` à l'intérieur des conditions, comme illustré dans les exemples ci-dessus.
Résumé
Express répartit les données de la requête entrante sur trois objets : `req.params` pour les segments d'URL, `req.query` pour les query strings, et `req.body` pour le payload JSON analysé. Enregistrer le middleware `express.json()` débloque l'analyse du corps. Une fois ces trois sources comprises, construire des endpoints CRUD standard revient à associer les méthodes HTTP et les codes de statut à la bonne opération sur les données — `POST` et `201` pour la création, `GET` pour les lectures, `PUT` pour les mises à jour, `DELETE` avec `204` pour la suppression.
Point de contrôle de la leçon
Révisez la leçon et recevez des conseils sur votre travail.