Wenn ich es tue console.log(req.body) es zeigt an:
[Object: null prototype] { title: 'product' }
statt nur { title: 'product' }
Ich frage mich, ob dies tatsächlich ein Fehler bei express ist oder nur eine Eigenschaft, die kürzlich zu express hinzugefügt wurde, da ich ein anderes Projekt heruntergeladen habe, das letztes Jahr erstellt wurde, und es den gleichen Ansatz verwendet hat, als ich es getan habe console.log(req.body)es zeigte die gleiche Ausgabe.
Ändern Sie Ihren URL-codierten Bodyparser auf “true” statt auf “false” und das wird es tun.
– José Gisber
13. Januar 2021 um 6:09 Uhr
Maximilian Schwarzemüller richtig?
– Abhay Patil
11. Februar um 16:13 Uhr
Jonas Wilms
Das ist eigentlich gutes Design. Objekte erben standardmäßig die Object.prototype das einige Hilfsfunktionen enthält (.toString(), .valueOf()). Nun, wenn Sie verwenden req.body und Sie übergeben keine Parameter an die HTTP-Anforderung, dann würden Sie erwarten req.body leer sein. Wenn es nur “ein normales Objekt” wäre, wäre es nicht ganz leer:
Es gibt eine Möglichkeit, “leere Objekte” zu erstellen, dh Objekte ohne Eigenschaften / Prototypen, und das ist Object.create(null). Sie sehen eines dieser Objekte in der Konsole.
Also nein, dies ist kein Fehler, der behoben werden muss, das ist nur eine großartige Nutzung der Funktionen von JS.
Habe dieses Teil hier nicht bekommen: Sie übergeben keine Parameter an die HTTP-Anforderung, dann würden Sie erwarten, dass req.body leer ist. Wenn es nur “ein normales Objekt” wäre, wäre es nicht: req.body.toString();. Können Sie das näher erläutern?
– Ein Schurken-Otaku
24. Mai 2019 um 19:32 Uhr
@AmitDas meint er auch wenn req.body hätte keine “eigenen” Eigenschaften (zB title wie im obigen Beispiel) würde es immer noch den Standardobjektprototyp erben und Methoden wie haben toString() macht es nicht leer.
Dies ist, was ich am Ende getan habe, um einige Tests zu reparieren, aber es scheint falsch zu sein
– DCSAN
17. Juli 2020 um 0:52 Uhr
const groups = {…match.groups} // Nullobjekt für Testvergleich entfernen
– DCSAN
17. Juli 2020 um 1:06 Uhr
Vielen Dank. Dies löst das Problem, aber das Drucken des JSON ist nicht schön.
– Vengatesh Murugasamy
20. August 2021 um 18:00 Uhr
Danke vielmals. Es ist 1:30 Uhr. Und kämpfen mit sehr grundlegenden Aufgaben, die in Javascript erledigt werden. Sie sagten mir, es ist eine schnelle und schnelle Entwicklung.
– Atul
22. März um 20:05 Uhr
Ich habe ein Problem und mein Terminal hat mir die folgende Erklärung gezeigt
body-parser deprecated undefined extended: provide extended option at express
und ich habe das benutzt app.use(bodyParser.urlencoded({extended: false}))
oder
Wenn Sie eine Express-Version ab Version 4.16 ausführen, geben Sie einfach ein
app.use(express.urlencoded({extended: true}))
Ich denke, es hilft dir
Um mehr über die erweiterte Option zu erfahren, lesen Sie die Dokumentation oder jemand hier hat gut darauf geantwortet – Was bedeutet “erweitert” in Express 4.0?
Der Unterschied zwischen „extended:true“ und „extended:false“ besteht in der Verwendung der zugrunde liegenden Parsing-Bibliothek. github.com/expressjs/body-parser#bodyparserurlencodedoptions Es hat nichts mit dem beschriebenen Problem zu tun (das kein Problem ist).
– zaphod1984
10. Dezember 2019 um 8:08 Uhr
Sie können verwenden Object.assign um Ihr Problem folgendermaßen zu beheben:
Es initialisiert ein neues Objekt mit Object.prototype und weist alle Eigenschaften von zu req.body dazu.
weil das Objekt auf dem Null-Objekt basiert. Ich fand den besten Weg, dies abzustreifen, z. B. wenn Sie eine genaue Übereinstimmung für Tests benötigen, verwenden Sie:
const groups = {...match.groups} // remove null object for test comparison
Ändern Sie Ihren URL-codierten Bodyparser auf “true” statt auf “false” und das wird es tun.
– José Gisber
13. Januar 2021 um 6:09 Uhr
Maximilian Schwarzemüller richtig?
– Abhay Patil
11. Februar um 16:13 Uhr