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.

7voto

Gerardo Bautista Punkte 745

In Express 4 ist es wirklich einfach

const app = express()
const p = process.env.PORT || 8082

app.use(express.json())

6voto

Sehr viel Zeit verschwendet:

Je nach Content-Type in Ihrer client Anfrage sollte der Server unterschiedliche app.use() haben, eine der folgenden:

app.use(bodyParser.text({ type: 'text/html' }))
app.use(bodyParser.text({ type: 'text/xml' }))
app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))
app.use(bodyParser.json({ type: 'application/*+json' }))

Quelle: https://www.npmjs.com/package/body-parser#bodyparsertextoptions

Beispiel:

Für mich, Auf der Clientseite hatte ich folgenden Header:

Content-Type: "text/xml"

Also habe ich auf der Serverseite Folgendes verwendet:

app.use(bodyParser.text({type: 'text/xml'}));

Dann hat req.body gut funktioniert.

6voto

Hicham Mounadi Punkte 141

Da ich dasselbe Problem hatte, obwohl ich weiß, dass BodyParser nicht mehr verwendet wird und ich bereits app.use(express.json()) benutzt habe, war das Problem {FÜR MICH}: Ich habe platziert

app.use(express.json())

nach

app.use('api/v1/example', example) => {betrifft die Route}

als ich diese beiden Zeilen neu angeordnet habe;

1 - app.use(express.json())

2 - app.use('api/v1/example', example)

hat es perfekt funktioniert

6voto

spikeyang Punkte 691

Dies geschah mir heute. Keine der oben genannten Lösungen funktioniert für mich. Aber ein wenig googeln half mir, dieses Problem zu lösen. Ich programmiere für den WeChat-Server von Drittanbietern.

Die Dinge werden etwas komplizierter, wenn Ihre node.js-Anwendung das Lesen von streamenden POST-Daten erfordert, wie z.B. eine Anfrage von einem REST-Client. In diesem Fall wird die Eigenschaft "lesbar" der Anfrage auf true gesetzt und die POST-Daten müssen in Abschnitten gelesen werden, um alle Inhalte zu sammeln.

http://www.primaryobjects.com/CMS/Article144

5voto

Kkkk Kkkk Punkte 241

Ich habe es gelöst mit:

app.post('/', bodyParser.json(), (req, res) => {//Wir haben req.body 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