CNode

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

问答
Zzbsccc发布于10 年前最后回复10 年前9 回复18673 浏览0 收藏

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

查看回复

回复 (9)

J
JustforNode#1·10 年前

直接ctx.body喽

Z
zbsccc#2·10 年前
引用 JustforNode直接ctx.body喽

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

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

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

D
DevinXian#5·10 年前

最好把asyncawait配合使用吧

S
SunilWang#6·10 年前

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);
        });
    });
Z
zbsccc#7·10 年前
引用 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#8·10 年前
引用 zbsccc@KingTree 但是console.log是正常执行的,你这种办法我写过一个, .then(ctx.response.body = 2)可以执行, 但是.then(()= { ctx.re...

@zbsccc

你陷入了一个异步误区。

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

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

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