[英]Request Body is undefined in 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
}
然后通过 jquery ajax 发送一个 post reqeust :
var xhr = $.ajax({
type: 'POST',
dataType: 'json',
contentType: 'application/json',
url: 'http://localhost/getit',
data: {"name":"me"},
success: function(response) {
}
});
但在 koa 和this.req
中我找不到我的数据。 在谷歌浏览器开发者工具中,我可以看到标题并且一切都发送正常,但我在 koa 中看不到它。
更新
正确的是:
function *getit(){
console.log(this.request.body); //undefined
}
有趣的是,我遇到了同样的错误,但我的问题是 app.use() 语句的顺序。 以下不适用于我,并为 this.request.body 返回“未定义”:
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);
但是,如果我将两个 app.use() 语句的顺序颠倒为以下:
app.use(bodyParser());
app.use(router(app));
然后我可以看到 this.request.body 中的元素。 我正在使用 koa v0.5.5、koa-body-parser v1.0.0、koa-router v3.1.2 和 node 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
是不正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.