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.

588voto

Mark Bonano Punkte 5982

UPDATE Juli 2020

express.bodyParser() ist nicht mehr Teil von express. Sie müssen es separat installieren, bevor Sie es laden:

npm i body-parser

// dann in deiner App
var express = require('express')
var bodyParser = require('body-parser')

var app = express()

// Erstelle den Parser für application/json
var jsonParser = bodyParser.json()

// Erstelle den Parser für application/x-www-form-urlencoded
var urlencodedParser = bodyParser.urlencoded({ extended: false })

// POST /login erhält urlencodierte Bodies
app.post('/login', urlencodedParser, function (req, res) {
  res.send('Willkommen, ' + req.body.username)
})

// POST /api/users erhält JSON-Bodies
app.post('/api/users', jsonParser, function (req, res) {
  // Benutzer in req.body erstellen
})

Siehe hier für weitere Informationen

Original folgt

Sie müssen sicherstellen, dass Sie alle Konfigurationen VOR dem Definieren von Routen festlegen. Wenn Sie dies tun, können Sie weiterhin express.bodyParser() verwenden.

Ein Beispiel sieht wie folgt aus:

var express = require('express'),
    app     = express(),
    port    = parseInt(process.env.PORT, 10) || 8080;

app.configure(function(){
  app.use(express.bodyParser());
});

app.listen(port);

app.post("/someRoute", function(req, res) {
  console.log(req.body);
  res.send({ status: 'Erfolg' });
});

379voto

Jay Punkte 4077

Die neuesten Versionen von Express (4.x) haben die Middleware vom Kernframework getrennt. Wenn Sie den Body-Parser benötigen, müssen Sie ihn separat installieren

npm install body-parser --save

und fügen Sie dann in Ihrem Code hinzu

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())

150voto

TechTurtle Punkte 1875

Express 4 verfügt über einen integrierten Body-Parser. Es ist nicht notwendig, einen separaten Body-Parser zu installieren. Also wird das Folgende funktionieren:

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

104voto

danmactough Punkte 5315

Nein. Du musst app.use(express.bodyParser()) vor app.use(app.router) verwenden. Tatsächlich sollte app.use(app.router) das letzte sein, was du aufrufst.

47voto

Kevin Xue Punkte 726

Der Content-Type im Anforderungsheader ist wirklich wichtig, besonders wenn Sie die Daten von curl oder anderen Tools posten.

Stellen Sie sicher, dass Sie etwas wie application/x-www-form-urlencoded, application/json oder andere verwenden, abhängig von Ihren geposteten Daten. Wenn Sie dieses Feld leer lassen, wird Express verwirrt sein.

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