我有一个Koa 2 应用程序,/signup的POST请求由以下函数处理:
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();
却无法返回并被卡住了。我认为问题出在这里,因为如果我删除它,代码就可以正常执行。如果我改用Promise,例如
find().then
,它也能工作。async/await也能工作,因为如果我改成等待fetch()(模拟异步),它也能工作……但这是我的babel配置。{
"presets" : ["latest", "stage-0"],
"plugins": [
["module-resolver", {
"root": ["./src"]
}]
]
}
mongoose 的版本为 4.7.0
.exec()
(尽管可能不一定需要使用它)。另外,你确定它没有抛出异常吗?当发生异常时,你的代码会调用next
两次(一次带有错误参数,然后带有return next
)。 - robertklep