与Koa的Mongoose async / await卡在等待Model.findOne()。exec()

时间:2016-11-27 15:28:17

标签: node.js mongoose async-await babeljs koa2

我有一个Koa 2应用程序,并且这个函数处理了/ signup的帖子:

import User from 'models/user';

export const signup = async (ctx, next) => {
  const { email, password } = ctx.request.body;
  try {
    const existingUser = await User.findOne({ email });

    if (existingUser) {
      ctx.body = { error: 'Email is in use' };
      return next();
    }

    const user = new User({
      email,
      password,
    });
    await user.save();
    ctx.body = { success: true };
  } catch (e) {
    next(e);
  }
  return next();
};

功能接收到正确的数据,但await User.findOne().exec();永远不会返回并被卡住。

我认为问题存在,因为如果删除,代码会正常执行。如果我切换到承诺... find().then它也有效。 async / await正在工作,因为如果我改为await fetch()(模拟异步)它可以工作......但这里是我的babel配置

{
  "presets" : ["latest", "stage-0"],
  "plugins": [
    ["module-resolver", {
      "root": ["./src"]
    }]
  ]
}

mongoose是版本4.7.0

2 个答案:

答案 0 :(得分:0)

我写了非常相似的应用程序,但一切正常。您使用什么类型的承诺?我的意思是你使用本机JS承诺或Mongoose承诺?随着mongoose承诺我遇到了问题所以我改为原生JS:

const mongoose = require('mongoose');

mongoose.Promise = Promise; // Use native Promises

mongoose.connect(config.get('mongoose.uri'), config.get('mongoose.options'));
...
module.exports = mongoose;

答案 1 :(得分:0)

我开始了另一个应用程序,现在正在运行。不知道发生了什么。 也许修复了新版本。