Node.js - 5.8 Limiter un intergiciel aux requêtes POST

Un intergiciel déclaré avec app.use s'exécute pour toutes les requêtes, qu'elles soient GET ou POST. Cette leçon montre comment restreindre son exécution à un seul type de méthode HTTP. Vous gardez ainsi le contrôle sur ce que fait chaque partie de votre serveur.

Le problème : un intergiciel pour toutes les requêtes

Le paquet d'analyse du corps des requêtes, body-parser, est un intergiciel. Déclaré avec app.use, il s'exécute pour chaque requête entrante. Il analyse donc aussi les requêtes GET, pour lesquelles ce traitement n'est pas nécessaire.

Le besoin est simple : ne faire tourner ce traitement que lorsqu'une donnée est envoyée par formulaire, c'est-à-dire en POST.

Filtrer par méthode HTTP

Au lieu de app.use, on peut utiliser app.post. L'intergiciel ne se déclenche alors que pour les requêtes POST. La syntaxe est la même que pour un filtre sur un chemin, comme /product.

Il existe aussi app.get pour les requêtes GET uniquement. D'autres méthodes existent, comme la suppression et la mise à jour, que l'auteur verra plus tard, car elles ne s'utilisent pas directement depuis un document HTML classique.

  • app.use : toutes les méthodes HTTP.
  • app.get : requêtes GET uniquement.
  • app.post : requêtes POST uniquement.

Vérifier le résultat

L'auteur teste deux cas. Une requête GET vers /product ne déclenche pas l'intergiciel filtré pour POST. En revanche, l'envoi du formulaire vers /product déclenche bien la réponse attendue.

Ce test montre que le filtre fonctionne. Il suffit de changer le mot de la méthode pour changer le comportement de l'intergiciel.

En résumé

Un intergiciel déclaré avec app.use s'exécute pour toutes les requêtes. Remplacer app.use par app.post, ou par app.get, restreint son exécution à une méthode HTTP. Ce filtre rend le serveur plus précis et évite des traitements inutiles.

Points clés

  • app.use exécute l'intergiciel pour toutes les méthodes HTTP.
  • app.post ne l'exécute que pour les requêtes POST.
  • app.get ne l'exécute que pour les requêtes GET.
  • Le filtre peut aussi porter sur un chemin, comme /product.
  • Le test permet de vérifier que le filtre se déclenche au bon moment.

Questions fréquentes

Pourquoi l'intergiciel s'exécute-t-il pour les requêtes GET ?

Parce qu'il est déclaré avec app.use, qui accepte toutes les méthodes HTTP. Pour le limiter, il faut utiliser une méthode précise.

Quelle est la différence entre app.use et app.post ?

app.use s'exécute pour toutes les méthodes. app.post ne s'exécute que pour les requêtes POST.

Le filtre fonctionne-t-il avec un chemin ?

Oui. La syntaxe est la même que pour un filtre sur un chemin, comme /product, avec la méthode choisie.