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.

4voto

AKTUALISIERUNG 2022

Sie können einfach verwenden.

app.use(express.json())

const express = require('express')
const app = express();
const PORT = process.env.PORT || 3001

// Aufruf der express.json() Methode zum Parsen
app.use(express.json())

app.listen(PORT, () => {
    console.log(`============ API Gateway ist geöffnet auf ${PORT} ============= `)
})

express.json() ist eine integrierte Middleware-Funktion in Express. Diese Methode wird zum Parsen der eingehenden Anfragen mit JSON-Payloads verwendet und basiert auf dem bodyparser.

Diese Methode gibt die Middleware zurück, die nur JSON parsen kann und nur die Anfragen überprüft, bei denen der Content-Type-Header mit der Typoption übereinstimmt.

express.json vs bodyParser.json

4voto

Arindam Punkte 823

Dieses Problem könnte daran liegen, dass Sie body-parser nicht verwendet haben (Link)

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

var app = express();
app.use(bodyParser.json());

4voto

LEMUEL ADANE Punkte 7356

Die neueste Version von Express hat bereits body-parser integriert. Sie können also folgendes verwenden:

const express = require('express);
... 
app.use(express.urlencoded({ extended: false }))
.use(express.json());

4voto

Inamur Rahman Punkte 2625

Dies ist auch eine Möglichkeit: Stellen Sie sicher, dass Sie diesen Code vor der Route in Ihrer app.js (oder index.js) Datei schreiben.

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

4voto

Inc33 Punkte 1524

Wenn Sie ein externes Tool verwenden, um die Anfrage zu erstellen, stellen Sie sicher, dass Sie den Header hinzufügen:

Content-Type: application/json

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