【发布时间】:2018-11-04 04:42:40
【问题描述】:
我正在将一个 Hapi 项目移植到 v17 并在迁移到 async/await 时遇到了 Mongoose 的一些问题。
对于我在模型(猫鼬)上使用“等待”的任何代码,例如对象:
const result = await User.findOne({email: email}).exec();
运行“node server.js”时出现以下异常
await User.findOne({}).exec();
^^^^^
SyntaxError: await is only valid in async function
at new Script (vm.js:74:7)
at createScript (vm.js:246:10)
at Object.runInThisContext (vm.js:298:10)
at Module._compile (internal/modules/cjs/loader.js:670:28)
at Object.Module._extensions..js
(internal/modules/cjs/loader.js:713:10)
at Module.load (internal/modules/cjs/loader.js:612:32)
at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
at Function.Module._load (internal/modules/cjs/loader.js:543:3)
at Module.require (internal/modules/cjs/loader.js:650:17)
at require (internal/modules/cjs/helpers.js:20:18)
我正在运行 node v10.2.0 和 mongoose 5.1.2,但无法理解为什么会出现错误。
mongoosejs 文档明确指出,如 here 所述,在使用 async/await 时应使用 exec() 来返回承诺。
有什么建议吗?
【问题讨论】:
-
在否决投票之前,您是否看过 mongoosejs 文档?因为他们声明“如果您使用的是 async/await,请等待 MyModel.findOne({}).exec()。”我认为它已经过测试并且是一个异步函数,否则为什么他们会在他们的文档中包含它。另外,我认为我不是世界上唯一一个同时使用 hapijs 和 mogoose 的人……还是我?这就是我寻求帮助的原因......而反对票只是你的傲慢!