web-dev-qa-db-ja.com

Express.jsを使用したリクエストからPOST bodyを取得できません

私はNodeJSとExpress(およびmongo、ソケットなどのより多くのもの)でAPIに取り組んでいますが、私は信じている非常に簡単なステップに固執しています、POST reqオブジェクトですが、_req.body_にアクセスしようとするとエラーが発生します

ここに私が持っているものがあります:

_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'));     
});
_

console.log(JSON.stringify(req.body));undefinedを取得し、res.send(req.body.self);で_TypeError: Cannot read property 'self' of undefined_を取得します

私はこのタイプのエラーを探してきましたが、通常、問題は人々がapp.use(express.bodyParser());ミドルウェアを含まないことです。また、app.use(express.urlencoded());app.use(express.json());を使用してみました。どちらも機能しませんでした。

console.log(req)を実行すると、オブジェクト全体を表示できますが、bodyまたはクライアントからPOSTリクエストを実行するときに渡されるコンテンツを表示できません(i JSONとして渡します)。

*restifyまたは_sails.js_を使用してNode内でAPIを構築できることは知っていますが、経験から学ぶことができるようにすべてを自分でやりたいです。

ありがとう

編集:

bodyparserミドルウェアを_app.router_ミドルウェアの前に配置する必要がありました。

26
kevinblanco

bodyParserミドルウェアを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);
32
Renato Gama

Content-Type = "application/json"Request Headers

8
Akash

BodyParserはExpressにバンドルされなくなりました

npm install body-parser
var bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }));
2
Tobias Artz

@kevinblancoの「私はbodyparserミドルウェアをapp.routerミドルウェアの前に置いて、それを修正しなければならなかった!」私のためにやった。底に埋まっているので、別の答えに入れます。

コードは次のようにする必要があります。

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
1
Ash Blue