跳到主要内容
CNode

koa2怎么用ctx.body给前端ajax返回数据?

问答
Zzbsccc发布于 10 年前最后回复 10 年前
9187160

express会写,用res.json就行。 但是Koa2不会了,划线的上面这个能行,下面的不行,不报错,但也不起作用,为何呢?要怎么写? QQ20170105-131214.png

查看回复

回复 (9)

S
SunilWang#810 年前
引用 zbsccc@KingTree 但是console.log是正常执行的,你这种办法我写过一个, .then(ctx.response.body = 2)可以执行, 但是.then(()= { ctx.re...

@zbsccc

你陷入了一个异步误区。

直接返回Promise对象就行了啊。干嘛要.then呢? .then是Promise 参数方法执行完调用 resolve 或者 reject 才会执行.then方法。。。

建议你去理解一下 co 这个模块。最好能看懂源码。你就知道该怎么用了。

Z
zbsccc#710 年前
引用 SunilWangdb.pool.query 是一个异步方法。 所以query callback 里面的方法是在响应以后才执行的。\

@KingTree 但是console.log是正常执行的,你这种办法我写过一个, .then(ctx.response.body = -2)可以执行, 但是.then(()=>{ ctx.response.body = -2; })就不执行 .then(ctx.response.body = -2).catch(xxxxxxx)也不执行

S
SunilWang#610 年前

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);
        });
    });
D
DevinXian#510 年前

最好把asyncawait配合使用吧

J
JustforNode#310 年前
引用 zbsccc@JustforNode 不好使,两种写法都是上面划线的这个好使,下面的不好使

@zbsccc 分别把 ctx 或 ctx.response 打印出来看看有什么不一样

Z
zbsccc#210 年前
引用 JustforNode直接ctx.body喽

@JustforNode 不好使,两种写法都是上面划线的这个好使,下面的不好使

J
JustforNode#110 年前

直接ctx.body喽

参与回复

登录后即可参与回复。登录