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.

23voto

ASHISH R Punkte 3569
// Erforder body-parser (um Post-Daten von Clients zu empfangen)

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

app.use(bodyParser.urlencoded({ extended: false }))

// Parsen von Anwendungs-JSON

app.use(bodyParser.json())

13voto

Jeff Beagley Punkte 885

Wenn jemand auf das gleiche Problem stößt, das ich hatte; Ich benutze ein URL-Präfix wie

http://example.com/api/

das eingerichtet wurde mit Router

app.use('/api', router); 

und dann hatte ich das Folgende

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

Was mein Problem behoben hat, war die Platzierung der Bodyparser-Konfiguration über app.use('/api', router);

Endgültig

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

// Dies ist eine Lösung für das Präfix example.com/api/ damit wir das Präfix nicht in jedem Route-Code benötigen
    app.use('/api', router);

13voto

Praneesh Punkte 363

Es sieht so aus, als würde der body-parser nicht mehr mit Express ausgeliefert. Wir müssen ihn möglicherweise separat installieren.

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

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

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

// parse application/vnd.api+json as json
app.use(bodyParser.json({ type: 'application/vnd.api+json' }))
app.use(function (req, res, next) {
console.log(req.body) // gefüllt!

Sehen Sie sich die Git-Seite https://github.com/expressjs/body-parser für weitere Informationen und Beispiele an.

11voto

Sonali Mangrinda Punkte 439

Der Middleware wird immer zuerst verwendet.

//MIDDLEWARE
app.use(bodyParser.json());
app.use(cors());    
app.use(cookieParser());

vor den Routen.

//MEINE ROUTEN
app.use("/api", authRoutes);

11voto

ANIK ISLAM SHOJIB Punkte 2614

Die meiste Zeit ist req.body aufgrund fehlender JSON-Parser undefiniert

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

könnte aufgrund des Fehlens von body-parser fehlen

const bodyParser  = require('body-parser');
app.use(bodyParser.urlencoded({extended: true}));

und manchmal ist es aufgrund von Cross-Origin-Verweisen undefiniert, also füge sie hinzu

const cors = require('cors');
app.use(cors())

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