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 comereq.body = constructBody(req.data)
, ma non riesco a trovarereq.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.