Ich verstehe nicht, warum wir body-parser
in einer Express-Anwendung benötigen , da wir Daten ohne Verwendung abrufen können body-parser
. Und was macht es eigentlich und wie?
node.js
express
body-parser
jiten
quelle
quelle
req.body
req.headers
(Array). Sie können denreq.body
Text des http-Pakets lesen, wie in @CleanCrispCode erläutert, und Sie können als Abfrageparameter lesen. Diesreq.query.variable
hilft, da Express die Anforderung automatisch in Javascript umwandelt Objekteres.body
ohne dass der gesamte Stream zuerst gepuffert wirdres.body
.Antworten:
Um
HTTP POST
Anfragen in Express.js Version 4 und höher zu bearbeiten , müssen Sie das aufgerufene Middleware-Modul installierenbody-parser
.body-parser
Extrahieren Sie den gesamten Body-Teil eines eingehenden Anforderungsstroms und machen Sie ihn verfügbarreq.body
.Die Middleware war früher Teil von Express.js, aber jetzt müssen Sie sie separat installieren.
Dieses
body-parser
Modul analysiert die JSON-, Puffer-, Zeichenfolgen- und URL-codierten Daten, die aufHTTP POST
Anfrage übermittelt wurden . Installieren Siebody-parser
mit NPM wie unten gezeigt.bearbeiten in 2019-april-2: in [email protected] die mit Express gebündelte Body-Parser-Middleware. Weitere Details finden Sie hier
quelle
urlencoded()
undjson()
sind tatsächlich Middleware-Fabriken, die eine Middleware-Funktion zurückgeben, die aufruftnext()
Ja, wir können ohne arbeiten
body-parser
. Wenn Sie dies nicht verwenden, erhalten Sie die unformatierte Anforderung, und Ihr Textkörper und Ihre Header befinden sich nicht im Stammobjekt des Anforderungsparameters. Sie müssen alle Felder einzeln bearbeiten.Oder Sie können verwenden
body-parser
, wie das Express-Team es wartet.Was Body-Parser für Sie tun kann: Es vereinfacht die Anfrage.
Wie man es benutzt: Hier ist ein Beispiel:
Installieren
npm install body-parser --save
So verwenden Sie Body-Parser im Express:
Verknüpfung.
https://github.com/expressjs/body-parser .
Und dann können Sie Body und Header im Root-Anforderungsobjekt abrufen. Beispiel
quelle
Die Antwort hier erklärt es sehr detailliert und brillant, die Antwort enthält:
Sie können sich auf den Body-Parser- Github beziehen, um dessen Dokumentation zu lesen. Er enthält Informationen zur Funktionsweise.
quelle
Versuchen wir, dies am wenigsten technisch zu halten.
Angenommen, Sie senden HTML-Formulardaten an den Server von node-js, dh Sie haben eine Anfrage an den Server gestellt. Die Serverdatei würde Ihre Anfrage unter einem Anfrageobjekt empfangen. Wenn Sie nun logischerweise dieses Anforderungsobjekt in Ihrer Serverdatei protokollieren, sollten Sie Ihre Formulardaten an einer bestimmten Stelle sehen, die dann extrahiert werden könnte, aber whoa! das tust du eigentlich nicht!
Wo sind unsere Daten? Wie werden wir es extrahieren, wenn es nicht nur in meiner Anfrage vorhanden ist?
Eine einfache Erklärung dafür ist, dass http Ihre Formulardaten in Teilen sendet, die zusammengestellt werden sollen, sobald sie ihr Ziel erreichen. Wie würden Sie Ihre Daten extrahieren?
Aber warum sollten Sie sich die Mühe machen, Ihre Daten jedes Mal manuell nach Blöcken zu analysieren und zusammenzustellen? Verwenden Sie etwas namens "Body-Parser", das dies für Sie tun würde.
body-parser analysiert Ihre Anfrage und konvertiert sie in ein Format, aus dem Sie auf einfache Weise relevante Informationen extrahieren können, die Sie möglicherweise benötigen.
Angenommen, Sie haben ein Anmeldeformular an Ihrem Frontend. Sie füllen es aus und fordern den Server auf, die Details irgendwo zu speichern.
Das Extrahieren von Benutzername und Passwort aus Ihrer Anfrage ist so einfach wie unten, wenn Sie Body-Parser verwenden.
Im Grunde genommen hat der Body-Parser Ihre eingehende Anfrage analysiert, die Blöcke mit Ihren Formulardaten zusammengestellt, dieses Body-Objekt für Sie erstellt und mit Ihren Formulardaten gefüllt.
quelle
Es analysiert den HTTP-Anforderungshauptteil. Dies ist normalerweise erforderlich, wenn Sie mehr als nur die URL kennen müssen, die Sie getroffen haben, insbesondere im Zusammenhang mit einer POST- oder PUT PATCH-HTTP-Anforderung, bei der die gewünschten Informationen im Text enthalten sind.
Grundsätzlich handelt es sich um eine Middleware zum Parsen von JSON, einfachem Text oder zum Zurückgeben eines rohen Pufferobjekts, mit dem Sie nach Bedarf umgehen können.
quelle
Um Zugriff auf die Postdaten zu erhalten, müssen wir verwenden
body-parser
. Grundsätzlich ist es das,body-parser
was es ausdrückt, den Körper zu lesen und ihn dann in einJson
Objekt zu zerlegen, das wir verstehen können.quelle
Dies alles ist eine Frage der Bequemlichkeit.
Grundsätzlich, wenn die Frage war ‚Haben wir müssen verwenden
body-parser
?‘ Die Antwort ist nein'. Wir können die gleichen Informationen aus der Client-Post-Anfrage auf einer umständlicheren Route erhalten, die im Allgemeinen weniger flexibel ist und die Menge an Code erhöht, die wir schreiben müssen, um die gleichen Informationen zu erhalten.Dies ist eine Art der gleichen wie die Frage ‚Haben wir müssen verwenden
express
beginnen?‘ Wieder ist die Antwort, dass es nein gibt, und wieder kommt es wirklich darauf an, uns den Aufwand zu ersparen, mehr Code zu schreiben, um die grundlegenden Dinge zu tun, die mit "eingebaut" verbunden sind.Oberflächlich betrachtet -
body-parser
erleichtert das Abrufen der in Clientanforderungen enthaltenen Informationen in verschiedenen Formaten, anstatt die Rohdatenströme zu erfassen und herauszufinden, in welchem Format die Informationen vorliegen, und noch weniger, diese Informationen manuell in verwendbare Daten zu analysieren.quelle
Anforderungskörper verstehen
Body-Parser verstehen
Gemäß seiner Dokumentation
Wie Sie im ersten Beispiel gesehen haben, mussten wir den eingehenden Anforderungsstrom manuell analysieren, um den Text zu extrahieren. Dies ist etwas mühsam, wenn mehrere Formulardaten unterschiedlichen Typs vorhanden sind. Wir verwenden also das Body-Parser-Paket, das all diese Aufgaben unter der Haube erledigt.
Es bietet vier Module zum Parsen verschiedener Datentypen
Nachdem der Raw-Content-Body-Parser eine der oben genannten Strategien verwendet hat (abhängig von der Middleware, für die Sie sich entschieden haben), werden die Daten analysiert. Sie können mehr über sie lesen, indem Sie ihre Dokumentation lesen.
Nach dem Festlegen von
req.body
auf den analysierten Bodynext()
ruft Body-Parser auf , um die nächste Middleware im Stack aufzurufen , die dann auf die Anforderungsdaten zugreifen kann, ohne darüber nachdenken zu müssen, wie sie entpackt und analysiert werden sollen.quelle