Jak działa bodyParser()

Pod maską

Ok Adam, wystarczy już tego BS. Rozumiem jak działa middlware. Ale kiedy nie używam bodyParser i wylogowuję obiekt req, po prostu dostaję tę ogromną rzecz i nie mogę nigdzie znaleźć moich danych. Rozumiem, jak middlware może zrobić coś takiego jak req.body = constructBody(req.data), ale nie mogę znaleźć req.data!!!

Jeśli zadajesz to pytanie, trafiłeś we właściwe miejsce! To też mnie zdezorientowało na jakiś czas. Jeśli jesteś taki jak ja, jest to rodzaj rzeczy, której nie możesz „po prostu zaakceptować”. Mógłbym zaakceptować, że jeśli dane są tam, możesz wykonać pewne manipulacje na nich, aby uzyskać req.body. Nie muszę rozumieć, na czym dokładnie polegają te manipulacje. Ale jeśli danych nawet nie ma, jak do cholery możesz wykonać manipulacje i uzyskać req.body?!!!

Pokażę ci.

Krótka odpowiedź brzmi, że działa to coś takiego:

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

Długa odpowiedź brzmi, że musisz zrozumieć strumienie. Aby zrozumieć strumienie, musisz zrozumieć, że informacje są przesyłane przez Internet za pośrednictwem pakietów.

Zakładam, że obejrzałeś trochę filmu i masz pojęcie, jak działają pakiety. Następnym krokiem jest zrozumienie abstrakcji strumienia, z którą będziesz pracował w Node.

Pomysł ze strumieniami polega na tym, że możesz zrobić coś takiego:

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

Za każdym razem, gdy przychodzi kawałek danych, dostajesz go do wykorzystania. Więc ciąg

abcdefghijklmnopqrstuvwxyz

Może przyjść w 5 kawałkach

abcde
fghij
klmno
pqrst
uvwxyz

i byłbyś w stanie uzyskać dostęp do każdego kawałka.

Do mojego zrozumienia, jeśli chcesz uzyskać dostęp do danych pocztowych, musisz je uzyskać ze strumienia. Ie. nie będzie po prostu dostępny na obiekcie req.

Sprawdź https://www.github.com/substack/stream-adventure, aby lepiej zrozumieć, jak działają strumienie.

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.