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...
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.