Miten bodyParser() toimii
Under the Hood
Okei Adam, riittää jo tämä paskanjauhanta. Ymmärrän miten middlware toimii. Mutta kun en käytä bodyParseria ja kirjaudun ulos
req
-objektista, saan vain tämän valtavan jutun enkä löydä tietojani mistään. Ymmärrän, miten middlware voi tehdä jotainreq.body = constructBody(req.data)
, mutta en löydäreq.data
!!!
Jos kysyt tuota kysymystä, olet tullut oikeaan paikkaan! Se hämmensi minuakin jonkin aikaa. Jos olet kuten minä, tämä on sellainen asia, jota ei voi ”vain hyväksyä”. Voisin hyväksyä sen, että jos tiedot ovat olemassa, voit tehdä niille jonkinlaisia manipulaatioita saadaksesi req.body
. Minun ei tarvitse ymmärtää tarkalleen, mitä nuo manipulaatiot ovat. Mutta jos dataa ei edes ole olemassa, miten helvetissä voit suorittaa manipulaatioita ja saada req.body
?!!!
Annahan kun näytän sinulle.
Lyhyt vastaus on, että se toimii jotakuinkin näin:
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();
});
});
Pitkä vastaus on, että sinun on ymmärrettävä virrat. Ymmärtääksesi streameja sinun on ymmärrettävä, että tietoa lähetetään internetin yli paketeilla.
Oletan, että olet katsonut hieman videota ja sinulla on käsitys siitä, miten paketit toimivat. Seuraava askel on ymmärtää stream-abstraktio, jonka kanssa tulet työskentelemään Nodessa.
Ajatuksena streamien kanssa on, että voisit tehdä jotakuinkin näin:
req.on('data', function(chunk) {
// here's the chunk
});
Joka kerta, kun datan palanen tulee, saat sen käyttöösi. Eli merkkijono
abcdefghijklmnopqrstuvwxyz
Voi tulla viidessä lohkossa
abcde
fghij
klmno
pqrst
uvwxyz
ja voisit käyttää jokaista lohkoa.
Ymmärtääkseni, jos haluat käyttää postin dataa, sinun on haettava se streamista. Eli se ei ole saatavilla vain req
-objektissa.
Katso https://www.github.com/substack/stream-adventure saadaksesi paremman käsityksen siitä, miten streamit toimivat.