请求正文在KOA中未定义

MBe*_*mam 11 javascript ajax jquery node.js koa

我有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
}
Run Code Online (Sandbox Code Playgroud)

然后通过jquery ajax发送帖子请求:

 var xhr = $.ajax({
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json',
            url: 'http://localhost/getit',
            data: {"name":"me"},
            success: function(response) {

            }
        });
Run Code Online (Sandbox Code Playgroud)

但在koa和this.req我无法找到我的数据.在谷歌浏览器开发者工具我可以看到标题和一切发送好,但我不能在koa看到它.

更新

正确的是:

   function *getit(){
 console.log(this.request.body); //undefined
}
Run Code Online (Sandbox Code Playgroud)

小智 18

有趣的是,我遇到了同样的错误,但我的问题是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);
Run Code Online (Sandbox Code Playgroud)

但是,如果我将两个app.use()语句的顺序颠倒过来:

app.use(bodyParser());
app.use(router(app));
Run Code Online (Sandbox Code Playgroud)

然后我可以看到this.request.body中的元素.我正在使用koa v0.5.5,koa-body-parser v1.0.0,koa-router v3.1.2和node v0.11.12.


sat*_*nas 5

我会使用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);
Run Code Online (Sandbox Code Playgroud)

var body = yield parse(this);行可以解决问题,解析方法将尝试解析任何请求但您可以替换它parse.json,parse.form或者parse.text如果您需要更多控制