带有 Koa 的 Mongoose async/await 卡在 await Model.findOne().exec() 上
Mongoose async/await with Koa get stuck on await Model.findOne().exec()
我有一个 Koa 2 应用程序,post 到 /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();
从未 returns 并卡住。
我认为问题就在那里,因为如果我删除,代码会正常执行。如果我像这样切换到 Promise... find().then
它也有效。
async/await 也在工作,因为如果我更改为 await fetch() (模拟异步)它会工作......但这是我的 babel 配置
{
"presets" : ["latest", "stage-0"],
"plugins": [
["module-resolver", {
"root": ["./src"]
}]
]
}
mongoose 是 4.7.0 版本
我写了非常相似的应用程序,但都运行良好。你使用什么类型的承诺?我的意思是你使用原生 JS promisese 或 Mongoose promises?对于猫鼬的承诺,我遇到了问题,所以我将其更改为原生 JS:
const mongoose = require('mongoose');
mongoose.Promise = Promise; // Use native Promises
mongoose.connect(config.get('mongoose.uri'), config.get('mongoose.options'));
...
module.exports = mongoose;
我启动了另一个应用程序,现在可以使用了。不知道发生了什么。
也许新版本修复了。
我有一个 Koa 2 应用程序,post 到 /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();
从未 returns 并卡住。
我认为问题就在那里,因为如果我删除,代码会正常执行。如果我像这样切换到 Promise... find().then
它也有效。
async/await 也在工作,因为如果我更改为 await fetch() (模拟异步)它会工作......但这是我的 babel 配置
{
"presets" : ["latest", "stage-0"],
"plugins": [
["module-resolver", {
"root": ["./src"]
}]
]
}
mongoose 是 4.7.0 版本
我写了非常相似的应用程序,但都运行良好。你使用什么类型的承诺?我的意思是你使用原生 JS promisese 或 Mongoose promises?对于猫鼬的承诺,我遇到了问题,所以我将其更改为原生 JS:
const mongoose = require('mongoose');
mongoose.Promise = Promise; // Use native Promises
mongoose.connect(config.get('mongoose.uri'), config.get('mongoose.options'));
...
module.exports = mongoose;
我启动了另一个应用程序,现在可以使用了。不知道发生了什么。 也许新版本修复了。