koa2怎么用ctx.body给前端ajax返回数据?
发布于 7 年前 作者 zbsccc 17694 次浏览 来自 问答

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

9 回复

直接ctx.body喽

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

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

最好把asyncawait配合使用吧

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)也不执行

@zbsccc

你陷入了一个异步误区。

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

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

@KingTree 明白了!谢谢!

回到顶部