Body-Parser Middleware
Node.js Körper parsen Middleware.
Analysieren Sie eingehende Request-Körper in einer Middleware vor Ihrem Handler, verfügbar
unter der req.body Eigenschaft.
Note As req.body’s shape is based on user-controlled input, all
properties and values in this object are untrusted and should be validated
before trusting. Zum Beispiel req.body.foo. oString() kann auf mehreren
Wegen fehlschlagen, zum Beispiel könnte die foo Eigenschaft nicht vorhanden sein oder kein String sein,
und toString sind möglicherweise keine Funktion und stattdessen eine Zeichenkette oder andere Benutzereingabe.
Erfahren Sie mehr über die Anatomie einer HTTP-Transaktion in Node.js.
Dies behandelt nicht mehrteilige Körper, aufgrund ihrer komplexen und typischerweise großen Natur. Für mehrteilige Einrichtungen können Sie sich für folgende Module interessieren:
Dieses Modul bietet folgende Parser:
Andere Körper-Parser, die Sie interessieren können:
Installation
$ npm install body-parserAPI
// Import all parsersconst bodyParser = require('body-parser');
// Or import individual parsers directlyconst json = require('body-parser/json');const urlencoded = require('body-parser/urlencoded');const raw = require('body-parser/raw');const text = require('body-parser/text');Das Objekt bodyParser legt verschiedene Fabriken auf, um Middleware zu erstellen. Alle
Middlewares werden die Eigenschaft req.body mit dem analysierten Körper füllen, wenn
der Content-Type Request Header mit der Option type übereinstimmt.
Die verschiedenen Fehler, die von diesem Modul zurückgegeben werden, werden im Fehlerabschnitt beschrieben.
bodyParser.json([options])
Gibt Middleware zurück, die nur json analysiert und nur Anfragen ansieht, bei denen
der Content-Type Header mit der type Option übereinstimmt. Dieser Parser akzeptiert jede
Unicode-Kodierung des Körpers und unterstützt die automatische Inflation von gzip,
br (brotli) und deflate Kodierungen.
Ein neues body Objekt mit den geparsten Daten wird auf dem request
Objekt nach der Middleware (d.h. req.body) gefüllt.
Optionen
The json function takes an optional options object that may contain any of
the following keys:
standard Zeichensatz
Geben Sie den Standardzeichensatz für den json-Inhalt an, wenn der Zeichensatz nicht
im Content-Type-Header der Anfrage angegeben ist. Standard ist utf-8.
aufblasen
Wenn auf true gesetzt, dann werden die entschärften (komprimierten) Körper aufgeblasen; wenn
false wird, werden die entschärften Körper abgelehnt. Standard ist true.
begrenzen
Steuert die maximale Größe des Request-Bodys. Wenn dies eine Zahl ist, gibt der Wert
die Anzahl der Bytes an; wenn es sich um einen String handelt, wird der Wert an die
bytes Bibliothek zum Parsen übergeben. Standard
auf '100kb.
Es wird empfohlen, nicht ein sehr hohes Limit zu konfigurieren und den Standardwert wann immer möglich zu verwenden. Das Erlauben größerer Payloads erhöht die Speicherauslastung aufgrund der Ressourcen, die für die Dekodierung und Transformation benötigt werden, und es kann auch zu längeren Reaktionszeiten führen, wenn mehr Daten verarbeitet werden. Mit „sehr hoch“ meinen wir Werte über dem Standardwert, zum Beispiel mit einer Nutzlast von 5 MB oder mehr können bereits damit begonnen werden, diese Risiken einzuführen. Bei den Standardlimits treten diese Probleme nicht auf.
reviver
Die Option reviver wird als zweites
Argument direkt an JSON.parse übergeben. Weitere Informationen zu diesem Argument
in der MDN-Dokumentation über JSON.parse.
strikt
When set to true, will only accept arrays and objects; when false will
accept anything JSON.parse accepts. Standard ist true.
typ
Die Option type wird verwendet, um festzustellen, welcher Medientyp die Middleware
parst. Diese Option kann ein String, ein Array von Strings oder eine Funktion sein. Wenn nicht
Funktion, Die Option type wird direkt an die
type-is übergeben und kann
ein Name der Erweiterung sein (wie json), ein Mime-Typ (wie application/json) oder
ein Mime-Typ mit einem Platzhalter (wie */* oder */json). Wenn eine Funktion aufgerufen wird, wird die Option type
als fn(req) aufgerufen und die Anfrage wird geparst, wenn sie einen wahrhaften
Wert zurückgibt. Standard ist application/json.
überprüfen
Die verify Option, falls vorhanden, wird als verify(req, res, buf, encoding) aufgerufen,
wobei buf ein Buffer des Roh-Request-Body ist und encoding die
Kodierung der Anfrage. Das Parsen kann durch Werfen eines Fehlers abgebrochen werden.
bodyParser.raw([options])
Gibt Middleware zurück, die alle Körper als Buffer parst und nur
Anfragen ansieht, wo der Content-Type Header mit der type Option übereinstimmt. Dieser
Parser unterstützt die automatische Inflation von gzip, br (brotli) und deflate
Kodierungen.
Ein neues body Objekt mit den geparsten Daten wird auf dem request
Objekt nach der Middleware (d.h. req.body) gefüllt. Dies wird ein Buffer Objekt
des Körpers sein.
Optionen
The raw function takes an optional options object that may contain any of
the following keys:
aufblasen
Wenn auf true gesetzt, dann werden die entschärften (komprimierten) Körper aufgeblasen; wenn
false wird, werden die entschärften Körper abgelehnt. Standard ist true.
begrenzen
Steuert die maximale Größe des Request-Bodys. Wenn dies eine Zahl ist, gibt der Wert
die Anzahl der Bytes an; wenn es sich um einen String handelt, wird der Wert an die
bytes Bibliothek zum Parsen übergeben. Standard
auf '100kb.
Es wird empfohlen, nicht ein sehr hohes Limit zu konfigurieren und den Standardwert wann immer möglich zu verwenden. Das Erlauben größerer Payloads erhöht die Speicherauslastung aufgrund der Ressourcen, die für die Dekodierung und Transformation benötigt werden, und es kann auch zu längeren Reaktionszeiten führen, wenn mehr Daten verarbeitet werden. Mit „sehr hoch“ meinen wir Werte über dem Standardwert, zum Beispiel mit einer Nutzlast von 5 MB oder mehr können bereits damit begonnen werden, diese Risiken einzuführen. Bei den Standardlimits treten diese Probleme nicht auf.
typ
Die Option type wird verwendet, um festzustellen, welcher Medientyp die Middleware
parst. Diese Option kann ein String, ein Array von Strings oder eine Funktion sein.
Wenn nicht eine Funktion, type Option wird direkt an die
type-is Bibliothek übergeben und diese
kann ein Name der Erweiterung sein (wie bin), ein Mime-Typ (wie
application/octet-stream) oder ein Mime-Typ mit einem Platzhalter (wie */* oder
application/*). If a function, the type option is called as fn(req)
and the request is parsed if it returns a truthy value. Standardmäßig
application/octet-stream.
überprüfen
Die verify Option, falls vorhanden, wird als verify(req, res, buf, encoding) aufgerufen,
wobei buf ein Buffer des Roh-Request-Body ist und encoding die
Kodierung der Anfrage. Das Parsen kann durch Werfen eines Fehlers abgebrochen werden.
bodyParser.text([options])
Gibt Middleware zurück, die alle Körper als String parst und nur
Anfragen ansieht, in denen der Content-Type Header mit der type Option übereinstimmt. Dieser
Parser unterstützt die automatische Inflation von gzip, br (brotli) und deflate
Kodierungen.
Ein neuer body String, der die geparsten Daten enthält, wird auf dem request
Objekt nach der Middleware (d.h. req.body) gefüllt. Dies wird eine Zeichenkette des
Körpers sein.
Optionen
The text function takes an optional options object that may contain any of
the following keys:
standard Zeichensatz
Geben Sie den Standardzeichensatz für den Textinhalt an, wenn der Zeichensatz nicht
im Content-Type-Header der Anfrage angegeben ist. Standard ist utf-8.
aufblasen
Wenn auf true gesetzt, dann werden die entschärften (komprimierten) Körper aufgeblasen; wenn
false wird, werden die entschärften Körper abgelehnt. Standard ist true.
begrenzen
Steuert die maximale Größe des Request-Bodys. Wenn dies eine Zahl ist, gibt der Wert
die Anzahl der Bytes an; wenn es sich um einen String handelt, wird der Wert an die
bytes Bibliothek zum Parsen übergeben. Standard
auf '100kb.
Es wird empfohlen, nicht ein sehr hohes Limit zu konfigurieren und den Standardwert wann immer möglich zu verwenden. Das Erlauben größerer Payloads erhöht die Speicherauslastung aufgrund der Ressourcen, die für die Dekodierung und Transformation benötigt werden, und es kann auch zu längeren Reaktionszeiten führen, wenn mehr Daten verarbeitet werden. Mit „sehr hoch“ meinen wir Werte über dem Standardwert, zum Beispiel mit einer Nutzlast von 5 MB oder mehr können bereits damit begonnen werden, diese Risiken einzuführen. Bei den Standardlimits treten diese Probleme nicht auf.
typ
Die Option type wird verwendet, um festzustellen, welcher Medientyp die Middleware
parst. Diese Option kann ein String, ein Array von Strings oder eine Funktion sein. Wenn nicht
eine Funktion, Die Option type wird direkt an die
type-is übergeben und kann
ein Name der Erweiterung sein (wie txt), ein Mime-Typ (wie text/plain), oder ein Mime
tippen Sie mit einem Platzhalter (wie */* oder text/*). Wenn eine Funktion, wird die type
Option als fn(req) aufgerufen und die Anfrage geparst, wenn sie einen
truthy Wert zurückgibt. Standard ist text/plain.
überprüfen
Die verify Option, falls vorhanden, wird als verify(req, res, buf, encoding) aufgerufen,
wobei buf ein Buffer des Roh-Request-Body ist und encoding die
Kodierung der Anfrage. Das Parsen kann durch Werfen eines Fehlers abgebrochen werden.
bodyParser.urlencoded([options])
Gibt Middleware zurück, die nur urlencoded Körper analysiert und nur
Anfragen ansieht, in denen der Content-Type Header mit der type Option übereinstimmt. Dieser
Parser akzeptiert nur UTF-8 und ISO-8859-1 Kodierungen des Körpers und unterstützt
automatische Inflation von gzip, br (brotli) und deflate Kodierungen.
Ein neues body Objekt mit den geparsten Daten wird auf dem request
Objekt nach der Middleware (d.h. req.body) gefüllt. Dieses Objekt wird Paare mit Schlüsselwert
enthalten, wobei der Wert ein String oder ein Array sein kann (wenn extended
false ist), oder jeder beliebige Typ (wenn extended true ist).
Optionen
The urlencoded function takes an optional options object that may contain
any of the following keys:
erweitert
Die “extended” Syntax erlaubt es, reiche Objekte und Arrays in das URL-kodierte Format zu kodieren. Dies ermöglicht eine JSON-ähnliche Erfahrung mit URL-kodiert. For more information, please see the qs library.
Standard ist false.
aufblasen
Wenn auf true gesetzt, dann werden die entschärften (komprimierten) Körper aufgeblasen; wenn
false wird, werden die entschärften Körper abgelehnt. Standard ist true.
begrenzen
Steuert die maximale Größe des Request-Bodys. Wenn dies eine Zahl ist, gibt der Wert
die Anzahl der Bytes an; wenn es sich um einen String handelt, wird der Wert an die
bytes Bibliothek zum Parsen übergeben. Standard
auf '100kb.
Es wird empfohlen, nicht ein sehr hohes Limit zu konfigurieren und den Standardwert wann immer möglich zu verwenden. Das Erlauben größerer Payloads erhöht die Speicherauslastung aufgrund der Ressourcen, die für die Dekodierung und Transformation benötigt werden, und es kann auch zu längeren Reaktionszeiten führen, wenn mehr Daten verarbeitet werden. Mit „sehr hoch“ meinen wir Werte über dem Standardwert, zum Beispiel mit einer Nutzlast von 5 MB oder mehr können bereits damit begonnen werden, diese Risiken einzuführen. Bei den Standardlimits treten diese Probleme nicht auf.
parameterLimit
Die Option parameterLimit steuert die maximale Anzahl an Parametern, die
in den URL-kodierten Daten erlaubt. If a request contains more parameters
than this value, a 413 will be returned to the client. Standard ist 1000.
typ
Die Option type wird verwendet, um festzustellen, welcher Medientyp die Middleware
parst. Diese Option kann ein String, ein Array von Strings oder eine Funktion sein. Wenn nicht
eine Funktion, Die Option type wird direkt an die
type-is übergeben und kann
ein Name der Erweiterung sein (wie urlencoded), ein Mime-Typ (wie
application/x-www-form-urlencoded), oder ein Mime-Typ mit einem Platzhalter (wie
*/x-www-form-urlencoded). Wenn eine Funktion aufgerufen wird, wird die type Option als
fn(req) aufgerufen und die Anfrage wird geparst, wenn sie einen truthy-Wert zurückgibt. Standardmäßig
auf application/x-www-form-urlencoded.
überprüfen
Die verify Option, falls vorhanden, wird als verify(req, res, buf, encoding) aufgerufen,
wobei buf ein Buffer des Roh-Request-Body ist und encoding die
Kodierung der Anfrage. Das Parsen kann durch Werfen eines Fehlers abgebrochen werden.
standard Zeichensatz
Der voreingestellte Zeichensatz, als der nicht im Inhaltstyp angegeben wird. Muss
entweder utf-8 oder iso-8859-1 sein. Standard ist utf-8.
charsetSentinel
Gibt an, ob der Wert des Parameters utf8 als Zeichensatz
Vorrang haben soll. Es erfordert, dass das Formular einen Parameter namens utf8 mit einem Wert
von \<unk> enthält. Standard ist false.
interpretieren NumericEntities
Gibt an, ob numerische Entitäten wie ☺ beim Parsen eines iso-8859-1
dekodiert werden sollen. Standard ist false.
tiefe
Die Option depth wird benutzt um die maximale Tiefe der qs Bibliothek zu konfigurieren, wenn extended true ist. Dies erlaubt Ihnen, die Anzahl der geparsten Schlüssel zu begrenzen und kann nützlich sein, um bestimmte Arten von Missbrauch zu verhindern. Standard ist 32. Es wird empfohlen, diesen Wert so niedrig wie möglich zu halten.
Fehler
Die von diesem Modul bereitgestellten Middlewares erzeugen Fehler mit Hilfe des
http-errors Modul. Die Fehler
werden typischerweise eine Eigenschaft status/statusCode haben, die den vorgeschlagenen
HTTP-Antwortcode enthält eine expose Eigenschaft um festzustellen, ob die message Eigenschaft
dem Client angezeigt werden soll, eine Eigenschaft type um den Typ des
Fehlers zu ermitteln, ohne mit der message übereinzustimmen, und eine body-Eigenschaft mit
des gelesenen Textes, falls verfügbar.
Die folgenden sind die häufigen Fehler erzeugt, obwohl jeder Fehler aus verschiedenen Gründen durch kommen kann.
Inhaltskodierung nicht unterstützt
Dieser Fehler tritt auf, wenn die Anfrage einen Content-Encoding-Header hatte, der
eine Kodierung enthielt, aber die Option “inflation” wurde auf false gesetzt. Die Eigenschaft
status ist auf 415 gesetzt, die Eigenschaft type ist auf
'encoding gesetzt. nsupported' und die Eigenschaft charset wird auf die nicht unterstützte Kodierung
gesetzt.
Entitäts-Parse fehlgeschlagen
This error will occur when the request contained an entity that could not be
parsed by the middleware. Die Eigenschaft status ist auf 400 gesetzt, die Eigenschaft type
ist auf 'entity.parse gesetzt. ailed' und die Eigenschaft body ist auf
gesetzt, der Entitätswert der fehlgeschlagen ist.
Entität verifizieren fehlgeschlagen
Dieser Fehler tritt auf, wenn die Anfrage eine Entität enthielt, die nicht
sein konnte durch die definierte verify Option zu verifizieren. Die Eigenschaft status ist
auf 403 gesetzt, die Eigenschaft type ist auf 'entity.verify gesetzt. ailed' und die Eigenschaft
body wird auf den Entitätswert gesetzt, der bei der Überprüfung fehlgeschlagen ist.
abgebrochen
Dieser Fehler tritt auf, wenn die Anfrage vom Client abgebrochen wird, bevor der Inhalt
gelesen wird. Die Eigenschaft empfangen wird auf die Anzahl der empfangenen
Bytes gesetzt, bevor die Anfrage abgebrochen wurde und die Eigenschaft erwartet ist
auf die Anzahl der erwarteten Bytes gesetzt. Die Eigenschaft status wurde auf 400
gesetzt und type auf `‘request.aborted’gesetzt.
Anfrage Entität zu groß
Dieser Fehler tritt auf, wenn die Größe des Request-Bodys größer ist als die Option “limit”
. Die Eigenschaft limit wird auf das Bytelimit gesetzt und die Eigenschaft length
wird auf die Länge des Anfragekörpers gesetzt. Die Eigenschaft status ist
auf 413 gesetzt und die Eigenschaft type auf `‘entity.too.large’ gesetzt.
Anfragengröße stimmt nicht mit der Länge des Inhalts überein
Dieser Fehler tritt auf, wenn die Länge der Anfrage nicht mit der Länge von
übereinstimmt, dem Content-Length Header. Dies tritt in der Regel auf, wenn die Anfrage fehlerhaft formatiert ist,
typischerweise wenn der Content-Length Header auf der Grundlage von Zeichen
anstelle von Bytes berechnet wurde. Die Eigenschaft status ist auf 400 gesetzt und die Eigenschaft type
ist auf `‘request.size.invalid’gesetzt.
streamkodierung sollte nicht gesetzt werden
Dieser Fehler tritt auf, wenn etwas als req.setEncoding Methode vor
auf diese Middleware lautete. Dieses Modul funktioniert nur auf Bytes und Sie können bei Verwendung dieses Moduls nicht
req.setEncoding aufrufen. Die Eigenschaft status ist auf
500 gesetzt und die Eigenschaft type ist auf `‘stream.encoding.set’ gesetzt.
stream ist nicht lesbar
Dieser Fehler tritt auf, wenn die Anfrage nicht mehr lesbar ist, wenn diese Middleware
versucht, sie zu lesen. Dies bedeutet typischerweise etwas anderes als eine Middleware von
dieses Modul liest bereits den Request-Body und die Middleware wurde auch auf
konfiguriert, die gleiche Anfrage zu lesen. Die Eigenschaft status ist auf 500 gesetzt und die Eigenschaft type
ist auf `‘stream.not.readable’ gesetzt.
zu viele Parameter
Dieser Fehler tritt auf, wenn der Inhalt der Anfrage den konfigurierten
parameterLimit für den urlencoded Parser übersteigt. Die Eigenschaft status ist auf
413 gesetzt und die Eigenschaft type ist auf 'parameters.too.many gesetzt.
nicht unterstütztes Zeichensatz “BOGUS”
Dieser Fehler tritt auf, wenn die Anfrage einen Zeichensatz-Parameter im
Content-Type Header hatte aber das Modul iconv-lite unterstützt es nicht oder der
Parser unterstützt es nicht. Der Zeichensatz ist sowohl in der Nachricht als auch in
wie in der Eigenschaft charset enthalten. Die Eigenschaft status ist auf 415 gesetzt, die Eigenschaft
type ist auf '-Zeichensatz gesetzt. nsupported' und die Eigenschaft charset
wird auf den Zeichensatz gesetzt, der nicht unterstützt wird.
nicht unterstützte Inhaltskodierung “bogus”
Dieser Fehler tritt auf, wenn die Anfrage einen Content-Encoding-Header hatte, der
eine nicht unterstützte Kodierung enthielt. Die Kodierung ist sowohl in der Nachricht
als auch in der Eigenschaft encoding enthalten. Die Eigenschaft status ist auf 415 gesetzt,
die Eigenschaft type ist auf 'encoding gesetzt. nsupported' und die Eigenschaft encoding
wird auf die nicht unterstützte Kodierung gesetzt.
Die Eingabe hat die Tiefe überschritten
Dieser Fehler tritt auf, wenn bodyParser.urlencoded mit der Eigenschaft extended auf true gesetzt wird und die Eingabe die konfigurierte Option depth überschreitet. Die Eigenschaft status ist auf 400 gesetzt. Es wird empfohlen, die depth Option zu überprüfen und auszuwerten, wenn ein höherer Wert erforderlich ist. Wenn die Option depth auf 32 gesetzt ist (Standardwert) wird der Fehler nicht angezeigt.
Beispiele
Ausdrücken/Verbinden auf oberster Ebene generisch
This example demonstrates adding a generic JSON and URL-encoded parser as a top-level middleware, which will parse the bodies of all incoming requests. Dies ist die einfachste Einrichtung.
const express = require('express');const bodyParser = require('body-parser');
const app = express();
// parse application/x-www-form-urlencodedapp.use(bodyParser.urlencoded());
// parse application/jsonapp.use(bodyParser.json());
app.use(function (req, res) { res.setHeader('Content-Type', 'text/plain'); res.write('you posted:\n'); res.end(String(JSON.stringify(req.body, null, 2)));});Express-Route-spezifisch
Dieses Beispiel zeigt das Hinzufügen von Körper-Parsern zu den Routen, die benötigt. Im Allgemeinen ist dies der am meisten empfohlene Weg, Körper-Parser mit Express zu verwenden.
const express = require('express');const bodyParser = require('body-parser');
const app = express();
// create application/json parserconst jsonParser = bodyParser.json();
// create application/x-www-form-urlencoded parserconst urlencodedParser = bodyParser.urlencoded();
// POST /login gets urlencoded bodiesapp.post('/login', urlencodedParser, function (req, res) { if (!req.body || !req.body.username) res.sendStatus(400); res.send('welcome, ' + req.body.username);});
// POST /api/users gets JSON bodiesapp.post('/api/users', jsonParser, function (req, res) { if (!req.body) res.sendStatus(400); // create user in req.body});Akzeptierten Typ für Parser ändern
Alle Parser akzeptieren eine type-Option, mit der du die
Content-Type ändern kannst, die die Middleware parsen wird.
const express = require('express');const bodyParser = require('body-parser');
const app = express();
// parse various different custom JSON types as JSONapp.use(bodyParser.json({ type: 'application/*+json' }));
// parse some custom thing into a Bufferapp.use(bodyParser.raw({ type: 'application/vnd.custom-type' }));
// parse an HTML body into a stringapp.use(bodyParser.text({ type: 'text/html' }));