Hoe bodyParser() werkt

Under the Hood

Ok Adam, genoeg met die BS. Ik begrijp hoe middlware werkt. Maar als ik bodyParser niet gebruik en het req-object uitlog, krijg ik alleen dit enorme ding en kan ik mijn gegevens nergens vinden. Ik begrijp hoe een middlware zoiets als req.body = constructBody(req.data) kan doen, maar ik kan req.data niet vinden!!

Als je die vraag stelt, ben je op de juiste plek! Het verwarde mij ook een tijdje. Als je bent zoals ik, is dit iets dat je niet “zomaar” kunt accepteren. Ik zou kunnen aanvaarden dat als de gegevens er zijn, je er een of andere manipulatie op zou kunnen uitvoeren om req.body te krijgen. Ik hoef niet precies te begrijpen wat die manipulaties zijn. Maar als de gegevens er niet eens zijn, hoe kun je dan in godsnaam die manipulaties uitvoeren en req.body krijgen?!

Laat me het je zien.

Het korte antwoord is dat het ongeveer zo werkt:

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();
});
});

Het lange antwoord is dat je streams moet begrijpen. Om streams te begrijpen, moet je begrijpen dat informatie over het internet wordt verzonden via packets.

Ik neem aan dat je een stukje van de video hebt bekeken en een idee hebt hoe packets werken. De volgende stap is het begrijpen van de stream-abstractie waarmee u in Node zult werken.

Het idee met streams is dat u iets als dit zou kunnen doen:

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

Telkens wanneer een brok van de gegevens binnenkomt, mag u het gebruiken. Dus de string

abcdefghijklmnopqrstuvwxyz

kan in 5 brokken binnenkomen

abcde
fghij
klmno
pqrst
uvwxyz

en je zou in staat zijn om toegang te krijgen tot elke brok.

Volgens mij, als je toegang wilt tot de post data, moet je het uit de stream halen. Het zal niet alleen beschikbaar zijn op het req object.

Kijk naar https://www.github.com/substack/stream-adventure voor een beter begrip van hoe streams werken.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.