How bodyParser() works

Under the Hood

Oké Ádám, elég a szarakodásból. Értem, hogyan működik a middlware. De ha nem használom a bodyParser-t és kijelentkezem a req objektumból, akkor csak ezt a hatalmas dolgot kapom és nem találom sehol az adataimat. Értem, hogy egy middlware hogyan csinálhat ilyesmit, mint req.body = constructBody(req.data), de nem találom a req.data!!!

Ha ezt a kérdést teszed fel, akkor jó helyre jöttél! Engem is összezavart egy ideig. Ha olyan vagy, mint én, akkor ez az a fajta dolog, amit nem tudsz “csak úgy elfogadni”. Azt el tudnám fogadni, hogy ha az adat megvan, akkor valamilyen manipulációt tudsz rajta végezni, hogy req.body legyen. Nem kell értenem, hogy pontosan mik ezek a manipulációk. De ha az adatok nincsenek is ott, akkor hogy a fenébe tudod elvégezni a manipulációkat és req.body-t kapni?!!!

Hadd mutassam meg.

A rövid válasz az, hogy ez valahogy így működik:

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

A hosszú válasz az, hogy meg kell értened a streameket. Ahhoz, hogy megértsd a streameket, meg kell értened, hogy az információt csomagokon keresztül küldik az interneten.

Feltételezem, hogy megnéztél egy kicsit a videóból, és van fogalmad arról, hogyan működnek a csomagok. A következő lépés az, hogy megértsd a stream absztrakciót, amivel a Node-ban dolgozni fogsz.

A streamek lényege, hogy valami ilyesmit csinálhatsz:

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

Minden alkalommal, amikor egy adatdarab érkezik, felhasználhatod. Tehát a string

abcdefghijklmnopqrstuvwxyz

Elképzelhető, hogy 5 darabonként érkezik

abcde
fghij
klmno
pqrst
uvwxyz

és minden egyes darabhoz hozzáférhetsz.

Az én értelmezésem szerint, ha hozzá akarsz férni a post adathoz, akkor azt a streamből kell megszerezned. Vagyis nem csak a req objektumon lesz elérhető.

Nézd meg a https://www.github.com/substack/stream-adventure-t, hogy jobban megértsd, hogyan működnek a streamek.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.