494 votes

Qu'est-ce que body-parser fait avec express ?

Je ne comprends pas pourquoi nous avons besoin de body-parser dans une application Express, alors que nous pouvons obtenir des données sans utiliser body-parser. Et en fait, que fait-il et comment?

87 votes

Afin de lire les données HTTP POST, nous devons utiliser le module node "body-parser". body-parser est un morceau du middleware express qui lit l'entrée d'un formulaire et la stocke sous forme d'objet javascript accessible via req.body

6 votes

Avec express, vous pouvez lire toutes les données à l'intérieur de la requête HTTP, telles que les en-têtes req.headers (tableau), vous pouvez lire le corps du paquet http comme req.body expliqué par @CleanCrispCode et vous pouvez lire en tant que paramètre de requête req.query.variable. Cela est utile car express transforme automatiquement la requête en objets JavaScript.

9 votes

@refactor - ceci pourrait être une des nombreuses raisons pour lesquelles nous devons utiliser body parser, mais cela ne dit pas ce qu'il fait, c'est-à-dire que les objets de requête et de réponse HTTP sont des flux et qu'ils ne sont pas 'lisibles' comme un objet unique comme res.body sans que le flux entier soit mis en mémoire tampon dans res.body d'abord.

382voto

Malatesh Patil Points 1468

Éditer: en avril 2019 dans express@4.16.0, le middleware body-parser est inclus dans express, donc vous n'avez plus besoin d'installer body-parser séparément. pour plus de détails voir ceci

ANCIEN:

Pour gérer les requêtes HTTP POST dans Express.js version 4 et supérieure, vous devez installer le module middleware appelé body-parser.

body-parser extrait toute la partie du corps d'un flux de requête entrant et l'expose sur req.body.

Le middleware faisait partie d'Express.js auparavant mais maintenant vous devez l'installer séparément.

Ce module body-parser analyse les données JSON, buffer, chaîne et encodées en URL soumises en utilisant une requête HTTP POST. Installez body-parser en utilisant NPM comme indiqué ci-dessous.

npm install body-parser --save

213 votes

Ceci est peut-être la chose la plus ennuyeuse jamais vue. Pourquoi les développeurs principaux d'Express rendraient-ils incroyablement difficile pour les nouveaux arrivants de se lancer en les obligeant à installer des middleware supplémentaires pour les cas d'utilisation les plus courants en développement web?

8 votes

@elmt si vous voulez quelque chose avec des opinions, essayez sails.js

0 votes

Est-ce que app.use(bodyParser.urlencoded({ extended: true })) et app.use(bodyParser.json()) invoquent automatiquement next() ?

121voto

Himanshu sharma Points 2156

Oui, nous pouvons travailler sans body-parser. Lorsque vous ne l'utilisez pas, vous obtenez la demande brute, et votre corps et en-têtes ne se trouvent pas dans l'objet racine du paramètre de demande. Vous devrez manipuler individuellement tous les champs.

Ou vous pouvez utiliser body-parser, car l'équipe express le maintient.

Ce que body-parser peut faire pour vous : Il simplifie la demande.
Comment l'utiliser : Voici un exemple :

Installer npm install body-parser --save

Voici comment utiliser body-parser dans express :

const express = require('express'),
      app = express(),
      bodyParser = require('body-parser');

// prend en charge l'analyse des données de type post application/json
app.use(bodyParser.json());

// prend en charge l'analyse des données de type post application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }));

Lien.

https://github.com/expressjs/body-parser.

Ensuite, vous pouvez obtenir le corps et les en-têtes dans l'objet de demande racine. Exemple

app.post("/posturl",function(req,res,next){
    console.log(req.body);
    res.send("response");
});

4 votes

Salut merci pour l'info, pouvez-vous poster un exemple de code sans body parser?

1 votes

@llyas vous pouvez consulter un blog itnext.io/…. Ici, ils ont utilisé le module http de node.js, de la même manière que vous pouvez l'utiliser dans express également, à l'intérieur de app.post("/posturl",function(req,res,next){

77voto

Suraj Jain Points 2072

La réponse ici l'explique de manière très détaillée et brillante, la réponse contient :

En bref; body-parser extrait la partie corps entière d'un flux de requête entrant et l'expose sur req.body comme quelque chose de plus facile à interagir. Vous n'en avez pas besoin en soi, car vous pourriez le faire vous-même. Cependant, il fera très probablement ce que vous voulez et vous évitera des ennuis.


Pour aller un peu plus en profondeur; body-parser vous donne un middleware qui utilise nodejs/zlib pour décompresser les données de la requête entrante si elles sont compressées et stream-utils/raw-body pour attendre les contenus bruts complets du corps de la requête avant de le "parser" (ce qui signifie que si vous n'alliez pas utiliser le corps de la requête, vous avez simplement perdu du temps).

Après avoir les contenus bruts, body-parser les parse en utilisant l'une des quatre stratégies, en fonction du middleware spécifique que vous avez décidé d'utiliser :

  • bodyParser.raw() : Ne parse pas réellement le corps, mais expose simplement les contenus mis en mémoire à partir d'avant dans un Buffer sur req.body.

  • bodyParser.text() : Lit le buffer en tant que texte brut et expose la chaîne résultante sur req.body.

  • bodyParser.urlencoded() : Parse le texte en données encodées en URL (c'est ainsi que les navigateurs ont tendance à envoyer les données de formulaire des formulaires réguliers définis sur POST) et expose l'objet résultant (contenant les clés et les valeurs) sur req.body. Pour comparaison; en PHP tout cela est automatiquement fait et exposé dans $_POST.

  • bodyParser.json() : Parse le texte en JSON et expose l'objet résultant sur req.body.

Seulement après avoir défini req.body sur les contenus désirables, il appellera le prochain middleware dans la pile, qui pourra ensuite accéder aux données de la requête sans avoir à réfléchir à la façon de les décompresser et de les parser.

Vous pouvez vous référer à body-parser github pour lire leur documentation, cela contient des informations sur son fonctionnement.

73voto

Abzy Points 71

Essayons de rester le moins technique possible.

Disons que vous envoyez des données de formulaire html à un serveur node-js, c'est-à-dire que vous avez fait une requête au serveur. Le fichier du serveur recevrait votre demande sous forme d'un objet requête. Maintenant, logiquement, si vous faites un console log de cet objet requête dans votre fichier serveur, vous devriez voir vos données de formulaire quelque part dedans, que vous pourriez ensuite extraire, mais eh bien ! Vous ne le voyez pas en fait !

Alors, où sont nos données ? Comment les extrairons-nous si elles ne sont pas présentes dans ma requête.

La simple explication à cela est que http envoie vos données de formulaire en morceaux qui sont destinés à être assemblés à mesure qu'ils atteignent leur destination. Comment allez-vous alors extraire vos données.

Mais pourquoi se donner la peine de parser manuellement vos données à chaque fois pour les morceaux et les assembler. Utilisez quelque chose appelé "body-parser" qui fera cela pour vous.

body-parser analyse votre demande et la convertit en un format à partir duquel vous pouvez facilement extraire les informations pertinentes dont vous pourriez avoir besoin.

Par exemple, supposons que vous ayez un formulaire d'inscription sur votre interface utilisateur. Vous le remplissez, et demandez au serveur d'enregistrer les détails quelque part.

Extraire le nom d'utilisateur et le mot de passe de votre demande est aussi simple que ci-dessous si vous utilisez body-parser.

var loginDetails = {    
    username : request.body.username,    
    password : request.body.password    
};

En gros, body-parser a analysé votre demande entrante, assemblé les morceaux contenant vos données de formulaire, puis créé cet objet body pour vous et l'a rempli avec vos données de formulaire.

11voto

Deepak Patidar Points 184

Il analyse le corps de la requête HTTP. Cela est généralement nécessaire lorsque vous avez besoin de connaître plus que simplement l'URL que vous avez visitée, en particulier dans le contexte d'une requête HTTP POST, PUT ou PATCH où les informations que vous voulez sont contenues dans le corps.

Fondamentalement, c'est un intergiciel pour l'analyse du JSON, du texte brut, ou simplement pour renvoyer un objet Buffer brut pour que vous puissiez le traiter selon vos besoins.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X