Cómo funciona bodyParser()

Dentro del capó

Ok Adam, basta con la BS. Entiendo cómo funciona el middlware. Pero cuando no uso bodyParser y cierro la sesión del objeto req, sólo obtengo esta cosa enorme y no puedo encontrar mis datos en ninguna parte. Entiendo cómo un middlware podría hacer algo como req.body = constructBody(req.data), pero no puedo encontrar req.data!!

Si estás haciendo esa pregunta, has venido al lugar correcto! A mí también me confundió durante un tiempo. Si eres como yo, este es el tipo de cosas que no puedes «aceptar sin más». Podría aceptar que si los datos están ahí, podrías realizar algún tipo de manipulación sobre ellos para obtener req.body. No tengo que entender exactamente cuáles son esas manipulaciones. Pero si los datos ni siquiera están ahí, ¿cómo diablos puedes realizar las manipulaciones y obtener req.body?

Déjame mostrarte.

La respuesta corta es que funciona algo así:

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 respuesta larga es que tienes que entender los flujos. Para entender los flujos, tienes que entender que la información se envía a través de Internet a través de paquetes.

Supongo que has visto un poco del vídeo y tienes una idea de cómo funcionan los paquetes. El siguiente paso es entender la abstracción de los flujos con la que trabajarás en Node.

La idea con los flujos es que puedes hacer algo como esto:

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

Cada vez que llega un trozo de datos, puedes usarlo. Así que la cadena

abcdefghijklmnopqrstuvwxyz

Podría venir en 5 trozos

abcde
fghij
klmno
pqrst
uvwxyz

y serías capaz de acceder a cada trozo.

Según tengo entendido, si quieres acceder a los datos del post, tienes que obtenerlos del stream. Es decir, no sólo estará disponible en el objeto req.

Consulta https://www.github.com/substack/stream-adventurepara entender mejor cómo funcionan los streams.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.