436 Stimmen

Req.body leer bei Posts

Plötzlich passiert das bei all meinen Projekten.

Immer wenn ich in nodejs mit express und body-parser einen Beitrag erstelle, ist req.body ein leeres Objekt.

var express    = require('express')
var bodyParser = require('body-parser')

var app = express()

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded())

// parse application/json
app.use(bodyParser.json())

app.listen(2000);

app.post("/", function (req, res) {
  console.log(req.body) // befüllt!
  res.send(200, req.body);
});

Via Ajax und Postman ist es immer leer.

Aber via curl

$ curl -H "Content-Type: application/json" -d '{"username":"xyz","password":"xyz"}' http://localhost:2000/

funktioniert es wie beabsichtigt.

Ich habe versucht, Content-type : application/json manuell im ersten zu setzen, aber dann bekomme ich immer 400 Bad Request

Das macht mich verrückt.

Ich dachte, dass etwas in body-parser aktualisiert wurde, aber ich habe es zurückgestuft und es hat nicht geholfen.

Jede Hilfe ist willkommen, danke.

408voto

Mick Cullen Punkte 8814

In Postman der 3 Optionen für den Inhalts Typ auswählen "X-www-form-urlencoded" und es sollte funktionieren.

Auch um die Fehlermeldung loszuwerden, ersetzen Sie:

app.use(bodyParser.urlencoded())

Durch:

app.use(bodyParser.urlencoded({
  extended: true
}));

Siehe https://github.com/expressjs/body-parser

Das 'body-parser' Middleware behandelt nur JSON und urlencoded Daten, nicht multipart

Wie @SujeetAgrahari erwähnte, ist body-parser jetzt in express.js eingebaut.

Verwenden Sie app.use(express.json()); um es in aktuellen Versionen für JSON Bodies zu implementieren. Für URL codierte Bodies (die Art, die von HTTP Formular POSTs erzeugt wird) verwenden Sie app.use(express.urlencoded());

314voto

sirthud Punkte 3141

Mit Postman können Sie HTTP-Post-Aktionen mit einem Roh-JSON-Datenpayload testen. Wählen Sie dazu die raw-Option aus und setzen Sie die folgenden Header-Parameter:

Content-Type: application/json

Stellen Sie außerdem sicher, dass Sie alle Zeichenfolgen, die als Schlüssel/Werte in Ihrem JSON-Payload verwendet werden, in doppelte Anführungszeichen setzen.

Das body-parser-Paket kann mehrzeilige Roh-JSON-Payloads problemlos verarbeiten.

{
    "foo": "bar"
}

Getestet in Chrome v37 und v41 mit der Postman-Erweiterung v0.8.4.13 (body-parser v1.12.2 und express v4.12.3) mit folgendem Setup:

var express = require('express');
var app = express();
var bodyParser = require('body-parser');

// Konfigurieren der App zur Verwendung von bodyParser()
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());

// ... Ihre Routen und Methoden hier

Postman Roh-JSON-Payload

102voto

Ich habe herausgefunden, dass es funktioniert, wenn man es mit dem Inhaltstyp sendet

"Anwendung/Json"

in Kombination mit serverseitigem
app.use(express.json())
(Wie von @marcelocra angegeben, würde die Version 2022 benutzt werden)

(alte Version zum Nachschlagen)
app.use(bodyParser.json());

Jetzt kann ich über

var data = {name:"John"}
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("POST", theUrl, false); // false für synchrone Anfrage
xmlHttp.setRequestHeader("Content-type", "application/json");
xmlHttp.send(data);

und das Ergebnis ist auf dem Server unter request.body.name verfügbar.

81voto

Jason Kim Punkte 16410

Ich habe einen wirklich dummen Fehler gemacht und vergessen, name-Attribute für Eingaben in meiner HTML-Datei zu definieren.

Also anstatt von

Habe ich das.

Jetzt wird request.body so bevölkert: { password: 'hhiiii' }

24voto

Tuan Punkte 495

Sie müssen überprüfen, ob das Body-Parser-Middleware ordnungsgemäß auf den Typ der Anfrage (json, urlencoded) festgelegt ist.

Wenn Sie es eingestellt haben,

app.use(bodyParser.json());

dann müssen Sie die Daten in Postman als Raw senden.

https://i.stack.imgur.com/k9IdQ.png Postman-Screenshot

Wenn Sie es eingestellt haben,

app.use(bodyParser.urlencoded({
    extended: true
}));

dann sollte die Option 'x-www-form-urlencoded' ausgewählt werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X