Cum funcționează bodyParser()
Under the Hood
Ok Adam, ajunge cu BS. Înțeleg cum funcționează middlware-ul. Dar atunci când nu folosesc bodyParser și mă deconectez de la obiectul
req
, primesc pur și simplu această chestie imensă și nu-mi pot găsi datele nicăieri. Înțeleg cum un middlware ar putea face ceva de genulreq.body = constructBody(req.data)
, dar eu nu pot găsireq.data
!!!
Dacă vă puneți această întrebare, ați ajuns în locul potrivit! Și pe mine m-a derutat o vreme. Dacă ești ca mine, acesta este genul de lucru pe care nu-l poți „accepta pur și simplu”. Aș putea accepta că, dacă datele sunt acolo, ai putea efectua un fel de manipulări asupra lor pentru a obține req.body
. Nu trebuie să înțeleg exact care sunt acele manipulări. Dar dacă datele nici măcar nu sunt acolo, cum naiba poți efectua manipulările și să obții req.body
?!!!
Lasă-mă să-ți arăt.
Răspunsul scurt este că funcționează cam așa:
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();
});
});
Răspunsul lung este că trebuie să înțelegi fluxurile. Pentru a înțelege fluxurile, trebuie să înțelegeți că informația este trimisă pe internet prin intermediul pachetelor.
Presupun că ați vizionat o parte din videoclip și aveți o idee despre cum funcționează pachetele. Următorul pas este să înțelegeți abstractizarea fluxurilor cu care veți lucra în Node.
Ideea cu fluxurile este că ați putea face ceva de genul următor:
req.on('data', function(chunk) {
// here's the chunk
});
De fiecare dată când vine o bucată de date, puteți să o folosiți. Deci, șirul
abcdefghijklmnopqrstuvwxyz
Ar putea veni în 5 bucăți
abcde
fghij
klmno
pqrst
uvwxyz
și ați putea accesa fiecare bucată.
Din câte am înțeles, dacă doriți să accesați datele postului, trebuie să le obțineți din flux. Adică, nu vor fi disponibile doar pe obiectul req
.
Verificați https://www.github.com/substack/stream-adventure pentru a înțelege mai bine cum funcționează fluxurile.
.