koa2怎么用ctx.body给前端ajax返回数据?
express会写,用res.json就行。 但是Koa2不会了,划线的上面这个能行,下面的不行,不报错,但也不起作用,为何呢?要怎么写?
9 回复
直接ctx.body喽
@JustforNode 不好使,两种写法都是上面划线的这个好使,下面的不好使
@zbsccc 分别把 ctx 或 ctx.response 打印出来看看有什么不一样
最好把async
和await
配合使用吧
db.pool.query 是一个异步方法。 所以query callback 里面的方法是在响应以后才执行的。\
ctx.body = await db.pool.query('xxx', data, function(err, res){
return new Promise(function(resolve, reject){
if(err){
console.log('ERROr');
return resolve(-2);
}
if(!res){
return resolve(-3);
}
return resolve(1);
});
});
@KingTree 但是console.log是正常执行的,你这种办法我写过一个, .then(ctx.response.body = -2)可以执行, 但是.then(()=>{ ctx.response.body = -2; })就不执行 .then(ctx.response.body = -2).catch(xxxxxxx)也不执行
你陷入了一个异步误区。
直接返回Promise对象就行了啊。干嘛要.then呢? .then是Promise 参数方法执行完调用 resolve 或者 reject 才会执行.then方法。。。
建议你去理解一下 co 这个模块。最好能看懂源码。你就知道该怎么用了。
@KingTree 明白了!谢谢!