Je travaille sur une API avec NodeJS et Express (et plus de choses comme le mongo, les sockets, etc.) mais je suis bloqué sur une étape très simple, je crois, j'essaye juste d'obtenir les informations du POST req
object, mais j'obtiens une erreur en essayant d'accéder à req.body
Voici ce que j'ai:
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'));
});
Sur console.log(JSON.stringify(req.body));
je reçois undefined
et sur res.send(req.body.self);
je reçois TypeError: Cannot read property 'self' of undefined
Je cherchais ce type d’erreurs et le problème, c’est que les gens n’incluent pas le middleware app.use(express.bodyParser());
; j’ai également essayé d’utiliser app.use(express.urlencoded());
et app.use(express.json());
, mais cela n’a pas fonctionné.
Si je fais un console.log(req)
, je peux voir l'objet en entier mais je ne peux pas voir body
ni le contenu que je transmets lorsque je fais la demande POST d'un client (je le transmets en tant que JSON ).
* Je sais que je pourrais utiliser restify
ou sails.js
pour créer des API dans Node, mais je veux tout faire moi-même afin de pouvoir apprendre de cette expérience.
Merci
MODIFIER:
Je devais mettre le middleware bodyparser
avant le middleware app.router
, ça corrige ça!
Déplacez le middleware bodyParser
au-dessus du middleware router
!
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"
devrait être l'un des Request Headers
BodyParser n'est plus fourni avec Express
npm install body-parser
var bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }));
Pour moi, la note de @ kevinblanco: "Je devais mettre le middleware bodyparser avant le middleware app.router, ça y est! l'a fait pour moi. En le mettant dans une réponse séparée puisque son enterré au bas.
Votre code devra ressembler à ceci:
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