急求!koa2 ctx.body不能给前端返回数据(express可以实现,koa2不能实现)
发布于 7 年前 作者 Jane-Mardan 7822 次浏览 来自 问答

let {account,password} = ctx.request.body; return promise = new Promise(function(resolve, reject){ //判断是否为空 if(_.isEmpty(account)) reject({statusCode : -1002 , message :errMessage.LOGIN_PARAM_ERROR}); else resolve(); }).then(function resolve(){ return new Promise(function(resolve, reject){ admin.findOne({account:account},function(err,Admin) { if(err) reject({statusCode : -1005 , message :errMessage.MONGODB_ERROR}); if(!Admin) reject({statusCode : -1003 , message :errMessage.ADMIN_NOT_EXIST}); else resolve({statusCode : 100 , message :errMessage.LOGIN_SUCCESS}); }) }) }).then(function resolve(result) { //能打印 console.log(‘result:’+result.message); return ctx.flash = {statusCode : -1003 , message :errMessage.LOGIN_PARAM_ERROR} }).catch(function (err) { console.log(err.message); return ctx.flash = {statusCode : -1003 , message :errMessage.LOGIN_PARAM_ERROR} });

4 回复

Koa是包含一系列中间件的generator function,中间件是洋葱圈模型

WX20170812-180909@2x.png

在他的 response 方法最后一句代码才是执行了 res.end(), 在之前要完成一些其他操作。 如果没猜错的话你的 ctx 上绑定的 flash 方法应该只是设置了一下 res 的 status 、 body 之类的,koa还没有调用res.end()吧。 你用express应该是手动调用了res.end()吧。

给的信息描述太少了,只是猜一下,另外代码格式就不能调整一下吗。

router.get('/', async function(ctx, next) {
    ctx.body = await Promise.resolve("hello");
});

@rrbe 代码格式的话 我是新手所以有些乱 如果你有好一点的建议或网上例子推荐一下,然后我在express返回前端的话直接全部使用res.json都能返回,我现在这个代码的问题就是我不使用查询语句ctx.body就能返回,但写查询语句我就报错,我也看了网上很多代码 自己也写了很多方式就是报错 let {account} = ctx.request.body; //判断是否为空 if(_.isEmpty(account)) //给前段返回数据(成功) return ctx.body = {statusCode : -1002 , message :errMessage.LOGIN_PARAM_ERROR}; //查询 let Admin = await admin.findOne({account:account}); //判断用户是否存在 if(!Admin) return ctx.body = {statusCode : -1003 , message :errMessage.ADMIN_NOT_EXIST}; else return ctx.body = {statusCode : 100 , message :errMessage.LOGIN_SUCCESS};

@godghdai 能详细点吗 我按你的写 返回错误promis.resolve不是函数

回到顶部