Come funziona bodyParser()

Sotto il cappuccio

Ok Adam, basta con le stronzate. Ho capito come funziona middlware. Ma quando non uso bodyParser e faccio il logout dell’oggetto req, ottengo solo questa cosa enorme e non riesco a trovare i miei dati da nessuna parte. Capisco come un middlware possa fare qualcosa come req.body = constructBody(req.data), ma non riesco a trovare req.data!!!

Se stai facendo questa domanda, sei venuto nel posto giusto! Ha confuso anche me per un po’. Se sei come me, questo è il genere di cose che non puoi “semplicemente accettare”. Potrei accettare che se i dati sono lì, si potrebbe eseguire qualche tipo di manipolazione su di essi per ottenere req.body. Non devo capire esattamente quali siano queste manipolazioni. Ma se i dati non sono nemmeno lì, come diavolo puoi eseguire le manipolazioni e ottenere req.body?!!!

Lascia che ti mostri.

La risposta breve è che funziona in questo modo:

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

La risposta lunga è che devi capire i flussi. Per capire i flussi, devi capire che le informazioni sono inviate attraverso internet tramite pacchetti.

Presumo che tu abbia guardato un po’ di video e abbia un’idea di come funzionano i pacchetti. Il prossimo passo è capire l’astrazione del flusso con cui lavorerai in Node.

L’idea con i flussi è che puoi fare qualcosa del genere:

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

Ogni volta che arriva un pezzo di dati, lo usi. Quindi la stringa

abcdefghijklmnopqrstuvwxyz

potrebbe arrivare in 5 pezzi

abcde
fghij
klmno
pqrst
uvwxyz

e sareste in grado di accedere ad ogni pezzo.

A mio avviso, se volete accedere ai dati del post, dovete prenderli dal flusso. Cioè, non sarà disponibile solo sull’oggetto req.

Guarda https://www.github.com/substack/stream-adventure per capire meglio come funzionano i flussi.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.