Comment fonctionne bodyParser()

Under the Hood

Ok Adam, assez avec les BS. Je comprends comment le middlware fonctionne. Mais quand je n’utilise pas bodyParser et que je déconnecte l’objet req, j’ai juste cette énorme chose et je ne peux trouver mes données nulle part. Je comprends comment un middlware pourrait faire quelque chose comme req.body = constructBody(req.data), mais je ne peux pas trouver req.data!

Si vous vous posez cette question, vous êtes au bon endroit ! Cela m’a confondu pendant un certain temps aussi. Si vous êtes comme moi, c’est le genre de chose que vous ne pouvez pas « juste accepter ». Je pourrais accepter que si les données sont là, vous pourriez effectuer une sorte de manipulation sur elles pour obtenir req.body. Je n’ai pas besoin de comprendre exactement quelles sont ces manipulations. Mais si les données ne sont même pas là, comment diable pouvez-vous effectuer les manipulations et obtenir req.body?!

Laissez-moi vous montrer.

La réponse courte est que cela fonctionne à peu près comme ceci:

app.use(function( req, res, next ) {
var data = '';
req.on('data', function( chunk ) {
data += chunk;
});
req.on('end', function() {
req.rawBody = data;
console.log( 'on end: ', data )
if (data && data.indexOf('{') > -1 ) {
req.body = JSON.parse(data);
}
next();
});
});

La réponse longue est que vous devez comprendre les flux. Pour comprendre les flux, vous devez comprendre que les informations sont envoyées sur Internet via des paquets.

Je suppose que vous avez regardé un peu la vidéo et que vous avez une idée du fonctionnement des paquets. La prochaine étape consiste à comprendre l’abstraction des flux avec laquelle vous travaillerez dans Node.

L’idée avec les flux est que vous pourriez faire quelque chose comme ceci :

req.on('data', function(chunk) {
// here's the chunk
});

Chaque fois qu’un morceau de données arrive, vous pouvez l’utiliser. Ainsi, la chaîne

abcdefghijklmnopqrstuvwxyz

pourrait arriver en 5 morceaux

abcde
fghij
klmno
pqrst
uvwxyz

et vous seriez en mesure d’accéder à chaque morceau.

Si je comprends bien, si vous voulez accéder aux données du post, vous devez les obtenir à partir du flux. Ie. il ne sera pas simplement disponible sur l’objet req.

Voyez https://www.github.com/substack/stream-adventurepour mieux comprendre le fonctionnement des flux.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.