koa问题,猫鼬等待不返回ctx.body

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了koa问题,猫鼬等待不返回ctx.body相关的知识,希望对你有一定的参考价值。

我正在使用koa重置密码,想要使用.save来启动schema.pre('save')。

数据使用findOneAndUpdate返回,但是当我使用.save时不返回。

什么是使它通过await / asyncs正确返回.save文档的神奇组合?

r.post("/public/auth/resetpass", async (ctx, next) => {
  const values = ctx.request.body;
  const query = {
    email: values.email,
    resetPasswordToken: values.resetPasswordToken,
    resetPasswordExpires: {
      $gt: new Date(new Date())
    }
  };

  const update = {
    password: values.password,
    resetPasswordToken: null,
    resetPasswordExpires: null
  };

//  let userFound = null;

  await User.findOne(query,async function(err, user) {
    if (err) {
      console.log("*** err");
      next(err);
    } else {
      if (_.isEmpty(user)) {
        ctx.status = 200;
        ctx.body = {
          error: true,
          message: "token is incorrect or time has expired for password reset"
        };
      } else {
        user.password = values.password;
        await user.save(function(err, doc) {
          if (err) {
            console.log('***err saving');
            next(err);
          } else {
            //console.log fires, but ctx body doesn't return
            console.log ('***saved, writing poco');
            ctx.body = userToPoco(doc);
          }
        });
      }
    }
  });
});

答案

最终转换为承诺。

  await user.save().then (doc =>{
    ctx.body = doc;
  });

以上是关于koa问题,猫鼬等待不返回ctx.body的主要内容,如果未能解决你的问题,请参考以下文章

Node.js bodyparser实现原理解析

Koa 中的错误处理

实现自己的Koa2

KOA 学习

koa-创建项目

Koa源码分析