私は [〜#〜] koa [〜#〜] 以下のように:
var koa = require('koa'),
bodyParser = require('koa-body-parser'),
router = require('koa-router'),
app = koa();
app.use(router(app));
app.use(bodyParser());
app.post('http://localhost/get',getit);
function *getit(){
console.log(this.req.body); //undefined
}
次に、jqueryajaxを介して投稿リクエストを送信します。
var xhr = $.ajax({
type: 'POST',
dataType: 'json',
contentType: 'application/json',
url: 'http://localhost/getit',
data: {"name":"me"},
success: function(response) {
}
});
しかし、コアとthis.req
データが見つかりません。グーグルでchrome開発者ツール私はヘッダーを見ることができ、すべてが正常に送信されますが、koaではそれを見ることができません。
更新
正しいのは:
function *getit(){
console.log(this.request.body); //undefined
}
興味深いことに、同じエラーが発生しましたが、問題はapp.use()ステートメントの順序でした。以下は私には機能せず、this.request.bodyに対して「undefined」を返します。
var koa = require('koa');
var router = require('koa-router');
var bodyParser = require('koa-body-parser');
var app = koa();
app.use(router(app));
app.use(bodyParser());
app.post('/login', function *() {
this.response.body = this.request.body;
});
app.listen(3000);
ただし、2つのapp.use()ステートメントの順序を逆にすると、次のようになります。
app.use(bodyParser());
app.use(router(app));
次に、this.request.bodyの要素を確認できます。私はkoav0.5.5、koa-body-parser v1.0.0、koa-router v3.1.2、およびノードv0.11.12を使用しています。
代わりに co-body モジュールを使用します(koa-body-parserによって内部的に使用されるのと同じモジュール)。コードは次のようになります。
_var koa = require('koa');
var _ = require('koa-route');
var parse = require('co-body');
var app = koa();
app.use(function* (next) {
this.req.body = yield parse(this);
yield next;
});
app.use(_.post('/login', function* () {
this.body = this.req.body;
}));
app.listen(3000);
_
var body = yield parse(this);
行がトリックを実行します。parseメソッドはすべてのリクエストを解析しようとしますが、さらに必要な場合は_parse.json
_、_parse.form
_、または_parse.text
_に置き換えることができます。コントロール
koaは、ミドルウェアを初期化した順序で使用します。したがって、bodyparserの前にルーターを挿入すると、ルーターは機能しません。リクエストはルーターミドルウェアに到達する前にパーサーに渡されないため、リクエストは解析されず、koaはrequest.bodyを無視します。したがって、順序付けは非常に重要です。
解決策
コメントによると、私にとって正しいのはthis.request.body
およびthis.req.body
が正しくありません。