Ich arbeite an einer API mit NodeJS und Express (und mehr Material wie Mongo, Steckdosen usw.), aber ich bleibe bei einem sehr einfachen Schritt, glaube ich, ich versuche nur, die Informationen aus dem POST req
-Objekt, aber beim Versuch, auf req.body
zuzugreifen, wird eine Fehlermeldung angezeigt
Folgendes habe ich:
var express = require('express'),
http = require('http'),
path = require('path'),
fs = require('fs'),
io = require('socket.io');
dynroute = require('dynroute');
var app = express();
app.set('port', process.env.PORT || 3999);
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(app.router);
app.use(express.bodyParser());
app.post('/user', function(req, res) {
console.log(JSON.stringify(req.body));
res.send(req.body.self);
});
http.createServer(app).listen(app.get('port'), function ()
{
console.log('App Server is now running at:' + app.get('port'));
});
Auf der console.log(JSON.stringify(req.body));
bekomme ich undefined
und auf der res.send(req.body.self);
bekomme ich TypeError: Cannot read property 'self' of undefined
Ich habe nach dieser Art von Fehlern gesucht und das Problem ist normalerweise, dass die Leute keine app.use(express.bodyParser());
-Middleware enthalten. Ich habe auch versucht, app.use(express.urlencoded());
und app.use(express.json());
zu verwenden.
Wenn ich eine console.log(req)
mache, kann ich das gesamte Objekt sehen, aber ich kann nicht body
oder irgendeinen Inhalt sehen, den ich übergeben werde, wenn ich die POST Anforderung von einem Client mache (ich gebe es als JSON weiter.) ).
* Ich weiß, ich könnte restify
oder sails.js
verwenden, um APIs in Node zu erstellen, aber ich möchte alles selbst machen, damit ich aus der Erfahrung lernen kann.
Vielen Dank
BEARBEITEN:
Ich musste die bodyparser
-Middleware vor die app.router
-Middleware legen.
Bewegen Sie die bodyParser
-Middleware über die router
-Middleware!
var app = express();
app.set('port', process.env.PORT || 3999);
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(app.router);
Content-Type = "application/json"
sollte einer der Request Headers
sein
BodyParser ist nicht mehr im Lieferumfang von Express enthalten
npm install body-parser
var bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }));
Für mich @ kevinblancos Notiz: "Ich musste die Bodyparser-Middleware vor die app.router-Middleware legen, das ist das Problem!" hat es für mich getan Setzen Sie es in eine separate Antwort, da es am Boden begraben ist.
Ihr Code muss ungefähr so aussehen:
app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// My routing here