当前位置 : 主页 > 网页制作 > Nodejs >

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

来源:互联网 收集:自由互联 发布时间:2021-06-16
我有一个Koa 2应用程序,这个函数处理一个发布到/注册: import User from 'models/user';export const signup = async (ctx, next) = { const { email, password } = ctx.request.body; try { const existingUser = await User.findOne
我有一个Koa 2应用程序,这个函数处理一个发布到/注册:

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();
};

功能接收正确的数据,但等待User.findOne().exec();永远不会回来并陷入困境.

我认为问题存在,因为如果我删除,代码将正常执行.如果我切换到Promise就像… find().那么它也有效.
async / await正在工作,因为如果我改为await fetch()(模拟异步)它可以工作……但这是我的babel配置

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

mongoose是版本4.7.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;
网友评论