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

Terminal window
$ npm install body-parser

API

// Import all parsers
const bodyParser = require('body-parser');
// Or import individual parsers directly
const 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 &#9786; 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-urlencoded
app.use(bodyParser.urlencoded());
// parse application/json
app.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 parser
const jsonParser = bodyParser.json();
// create application/x-www-form-urlencoded parser
const urlencodedParser = bodyParser.urlencoded();
// POST /login gets urlencoded bodies
app.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 bodies
app.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 JSON
app.use(bodyParser.json({ type: 'application/*+json' }));
// parse some custom thing into a Buffer
app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }));
// parse an HTML body into a string
app.use(bodyParser.text({ type: 'text/html' }));

Lizenz

MIT