Nie rozumiem, dlaczego potrzebujemy body-parser
aplikacji Express, ponieważ możemy uzyskiwać dane bez użycia body-parser
. A co to właściwie robi i jak?
node.js
express
body-parser
Jiten
źródło
źródło
req.body
req.headers
(tablica), możesz odczytaćreq.body
treść pakietu HTTP zgodnie z wyjaśnieniem @CleanCrispCode i możesz odczytać jako parametr zapytaniareq.query.variable
, pomaga, ponieważ express automatycznie przekształca żądanie w javascript obiektyres.body
cały strumień nie był buforowany jakores.body
pierwszy.Odpowiedzi:
Aby obsłużyć
HTTP POST
żądanie w Express.js w wersji 4 i wyższej, musisz zainstalować moduł oprogramowania pośredniego o nazwiebody-parser
.body-parser
wyodrębnij całą część treści przychodzącego strumienia żądań i udostępniaj jąreq.body
.Oprogramowanie pośrednie było wcześniej częścią Express.js, ale teraz musisz zainstalować je osobno.
Ten
body-parser
moduł analizuje JSON, bufor, a URL zakodowany ciąg danych przedstawionych za pomocąHTTP POST
żądania. Zainstalujbody-parser
za pomocą NPM, jak pokazano poniżej.edytuj w 2019-kwiecień-2: w [email protected] oprogramowanie pośredniczące body-parser w pakiecie z express. po więcej szczegółów zobacz to
źródło
urlencoded()
ijson()
faktycznie są to fabryki oprogramowania pośredniego, które zwracają funkcję oprogramowania pośredniego, która się wywołujenext()
Tak, możemy pracować bez
body-parser
. Gdy nie używasz tego, dostajesz surowe żądanie, a twoje ciało i nagłówki nie znajdują się w głównym obiekcie parametru żądania. Będziesz musiał indywidualnie manipulować wszystkimi polami.Lub możesz użyć
body-parser
, ponieważ zespół ekspresowy go utrzymuje.Co parser body może dla Ciebie zrobić: Upraszcza to żądanie.
Jak tego użyć: Oto przykład:
zainstalować
npm install body-parser --save
Oto jak używać ekspresowego body-parsera:
Połączyć.
https://github.com/expressjs/body-parser .
A potem możesz uzyskać treść i nagłówki w obiekcie żądania root. Przykład
źródło
Odpowiedź tutaj wyjaśnia ją bardzo szczegółowo i doskonale, odpowiedź zawiera:
Możesz zapoznać się z githubem parsera ciała, aby przeczytać ich dokumentację, która zawiera informacje dotyczące jego działania.
źródło
Spróbujmy zachować to najmniej techniczne.
Załóżmy, że wysyłasz dane formularza HTML na serwer node-js, tzn. Wysłałeś żądanie do serwera. Plik serwera otrzyma twoje żądanie w ramach obiektu żądania. Teraz logicznie, jeśli konsolujesz logować ten obiekt żądania w pliku serwera, powinieneś zobaczyć gdzieś w nim dane formularza, które można by wtedy wyodrębnić, ale zaraz! tak naprawdę nie!
Gdzie są nasze dane? Jak go wyodrębnimy, jeśli będzie nie tylko obecny w mojej prośbie.
Prostym wyjaśnieniem tego jest to, że http wysyła dane formularza w kawałkach, które mają zostać zebrane, gdy dotrą do miejsca docelowego. Jak wyodrębnić swoje dane.
Ale po co męczyć się za każdym razem ręcznie analizować dane pod kątem fragmentów i składać je. Użyj czegoś zwanego „parserem ciała”, który zrobiłby to za Ciebie.
body-parser analizuje twoje zapytanie i konwertuje je na format, z którego możesz łatwo wyodrębnić odpowiednie informacje, których możesz potrzebować.
Załóżmy na przykład, że masz interfejs rejestracji w interfejsie użytkownika. Wypełniasz go i prosisz serwer o zapisanie gdzieś szczegółów.
Wyodrębnienie nazwy użytkownika i hasła z żądania jest tak proste, jak poniżej, jeśli używasz parsera ciała.
Zasadniczo więc parser treści przeanalizował przychodzące żądanie, zgromadził porcje zawierające dane formularza, a następnie utworzył dla Ciebie ten obiekt treści i wypełnił go danymi formularza.
źródło
Analizuje treść żądania HTTP. Jest to zwykle konieczne, gdy potrzebujesz wiedzieć więcej niż tylko adres URL, który trafiłeś, szczególnie w kontekście żądania HTTP POST lub PUT PATCH HTTP, w którym żądane informacje znajdują się w treści.
Zasadniczo jest to oprogramowanie pośrednie do analizowania JSON, zwykłego tekstu lub po prostu zwracania surowego obiektu Buffer, abyś mógł sobie z nim poradzić zgodnie z wymaganiami.
źródło
Aby uzyskać dostęp do danych postu, musimy skorzystać
body-parser
. Zasadniczo to,body-parser
co pozwala ekspresowi odczytać ciało, a następnie przeanalizować je wJson
obiekcie, który możemy zrozumieć.źródło
Wszystko to jest kwestią wygody.
Zasadniczo, jeśli pytanie było: "Czy my potrzebujemy użyć
body-parser
? Odpowiedź brzmi nie'. Możemy wymyślić te same informacje z żądania klienta po użyciu bardziej okrężnej trasy, która ogólnie będzie mniej elastyczna i zwiększy ilość kodu, który musimy napisać, aby uzyskać te same informacje.To niby takie same, jak pyta: "Czy my potrzebujemy użyć
express
zacząć? Znów odpowiedź brzmi „nie” i znowu, naprawdę wszystko sprowadza się do zaoszczędzenia nam kłopotu z pisaniem większej ilości kodu do robienia podstawowych rzeczy, które ekspresowe ma „wbudowane”.Na powierzchni -
body-parser
ułatwia dostęp do informacji zawartych w żądaniach klientów w różnych formatach zamiast przechwytywania surowych strumieni danych i ustalania, w jakim formacie są informacje, a tym bardziej ręcznego analizowania tych informacji w użyteczne dane.źródło
Zrozumienie treści wniosku
Zrozumienie parsera ciała
Zgodnie z jego dokumentacją
Jak widzieliśmy w pierwszym przykładzie, musieliśmy ręcznie przeanalizować strumień przychodzących żądań, aby wyodrębnić treść. To staje się trochę nudne, gdy istnieje wiele danych formularzy różnych typów. Używamy więc pakietu body-parser, który wykonuje to wszystko pod maską.
Zapewnia cztery moduły do analizowania różnych typów danych
Po przetworzeniu surowej treści body-parser użyje jednej z powyższych strategii (w zależności od oprogramowania pośredniego, które zdecydowałeś się zastosować) do parsowania danych. Możesz przeczytać o nich więcej, czytając ich dokumentację.
Po ustawieniu
req.body
parsowanego ciała, parser ciała wywoła wywołanienext()
następnego oprogramowania pośredniego w dół stosu, który może następnie uzyskać dostęp do danych żądania bez konieczności zastanawiania się, jak go rozpakować i przeanalizować.źródło