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, mintreq.body = constructBody(req.data)
, de nem találom areq.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.