523 Stimmen

Express.js req.body nicht definiert.

Ich habe das als Konfiguration meines Express-Servers:

app.use(app.router); 
app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat" }));
app.set('view engine', 'ejs');
app.set("view options", { layout: true });
//Behandelt POST-Anfragen
app.use(express.bodyParser());
//Behandelt PUT-Anfragen
app.use(express.methodOverride());

Aber immer noch, wenn ich nach req.body.something in meinen Routen frage, erhalte ich einen Fehler, der darauf hinweist, dass body undefiniert ist. Hier ist ein Beispiel für eine Route, die req.body verwendet:

app.post('/admin', function(req, res){
    console.log(req.body.name);
});

Ich habe gelesen, dass dieses Problem durch das Fehlen von app.use(express.bodyParser()); verursacht wird, aber wie Sie sehen können, rufe ich es vor den Routen auf.

Irgendwelche Hinweise?

0 Stimmen

Es ist nicht wirklich eine Lösung für Ihr Problem, aber da dies der erste Thread ist, der aus Google-Ergebnissen resultiert, möchte ich hier erwähnen, dass darauf geachtet werden sollte, dass keine anderen fehlerhaften Middlewares verwendet werden.

46voto

Ankit kaushik Punkte 895

Stellen Sie zunächst sicher, dass Sie das npm-Modul mit dem Namen 'body-parser' installiert haben, indem Sie folgendes aufrufen:

npm install body-parser --save

Dann stellen Sie sicher, dass Sie die folgenden Zeilen eingefügt haben, bevor Sie die Routes aufrufen:

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

app.use(bodyParser.json());

43voto

Masiar Punkte 18610

Wie bereits unter einem Kommentar gepostet, habe ich es gelöst mit

app.use(require('connect').bodyParser());

anstatt

app.use(express.bodyParser());

Ich weiß immer noch nicht, warum das einfache express.bodyParser() nicht funktioniert...

41voto

abdesselam Punkte 941

Fügen Sie in Ihrer app.js ein

vor dem Aufruf des Routers

const app = express();
app.use(express.json());

39voto

Đăng Khoa Đinh Punkte 4193

Die Frage ist beantwortet. Da sie jedoch recht generisch ist und req.body undefined ein häufiger Fehler ist, insbesondere für Anfänger, finde ich, dass dies der beste Ort ist, um alles zusammenzufassen, was ich über das Problem weiß.


Dieser Fehler kann durch folgende Ursachen verursacht werden:

1. [SERVER-Seite] [Ziemlich oft] Vergessen oder falsch genutztes Parser-Middleware

  • Sie müssen das geeignete Middleware verwenden, um die eingehenden Anfragen zu parsen. Zum Beispiel parst express.json() die Anfrage im JSON-Format, und express.urlencoded() parst die Anfrage im urlencoded-Format.

    const app = express(); app.use(express.urlencoded()) app.use(express.json())

Sie können die vollständige Liste auf der express-Dokumentationsseite sehen

  • Wenn Sie den richtigen Parser für Ihre Anfrage in Express nicht finden können (XML, Formulardaten usw.), müssen Sie eine andere Bibliothek dafür finden. Um zum Beispiel XML-Daten zu parsen, können Sie diese Bibliothek verwenden

  • Sie sollten das Parser-Middleware vor dem Teil zur Routendeklaration verwenden (Ich habe einen Test gemacht, um dies zu bestätigen!). Das Middleware kann direkt nach der Initialisierung der Express-App konfiguriert werden.

  • Wie bereits in anderen Antworten erwähnt wurde, ist bodyParser seit Express 4.16.0 veraltet, Sie sollten die oben genannten integrierten Middleware verwenden.

2. [CLIENT-Seite] [Selten] Vergessen, die Daten zusammen mit der Anfrage zu senden

  • Nun ja, Sie müssen die Daten senden...

Um zu überprüfen, ob die Daten mit der Anfrage gesendet wurden oder nicht, öffnen Sie die Registerkarte Netzwerk in den Devtools des Browsers und suchen Sie nach Ihrer Anfrage.

  • Es ist selten, aber ich habe Leute gesehen, die versucht haben, Daten in der GET-Anfrage zu senden. Für die GET-Anfrage ist req.body undefiniert.

3. [SERVER & CLIENT] [Ziemlich oft] Verwendung von unterschiedlichen Content-Type

  • Server und Client müssen den gleichen Content-Typ verwenden, um sich gegenseitig zu verstehen. Wenn Sie Anfragen im json-Format senden, müssen Sie das Middleware json() verwenden. Wenn Sie Anfragen im urlencoded-Format senden, müssen Sie das Middleware urlencoded() verwenden...

  • Es gibt 1 kniffligen Fall, wenn Sie versuchen, eine Datei im form-data-Format hochzuladen. Dafür können Sie multer verwenden, ein Middleware zur Behandlung von multipart/form-data.

  • Was ist, wenn Sie den Client-Teil nicht kontrollieren? Ich hatte ein Problem, als ich die API für die Instant Payment Notification (IPN) programmierte. Die allgemeine Regel lautet, Informationen über den Client-Teil zu erhalten: Kommunizieren Sie mit dem Frontend-Team, gehen Sie zur Zahlungsdokumentationsseite... Eventuell müssen Sie entsprechendes Middleware basierend auf dem vom Client-Teil festgelegten Content-Typ hinzufügen.

Zum Schluss ein Ratschlag für Full-Stack-Entwickler :)

Wenn Sie ein Problem wie dieses haben, versuchen Sie, einige API-Testsoftware wie Postman zu verwenden. Das Ziel ist es, alle Störgeräusche im Client-Teil zu eliminieren, dies wird Ihnen helfen, das Problem korrekt zu identifizieren.

In Postman können Sie nach einem korrekten Ergebnis das Code-Generierungstool in der Software verwenden, um den entsprechenden Code zu erhalten. Die Schaltfläche befindet sich am rechten Rand. Sie haben viele Optionen in gängigen Sprachen/Bibliotheken... Bildbeschreibung hier eingeben

34voto

Prashanth K Punkte 329
app.use(express.json());

Es wird helfen, das Problem von req.body undefiniert zu lösen

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