私は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
_ミドルウェアの前に配置する必要がありました。
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);
Content-Type = "application/json"
はRequest Headers
BodyParserはExpressにバンドルされなくなりました
npm install body-parser
var bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }));
@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