Node.js Mongoose插入数据时exports返回undefined问题排查
问题根因
返回undefined是两个写法错误共同导致的:
new Event(eventObj)是Mongoose同步创建文档实例的操作,本身不返回Promise,加await没有实际作用- 你混用了Mongoose回调写法和async/await逻辑:给
save()传入回调函数时,save()不会返回Promise;你在回调内部写的return error、return event只会把值返回给回调本身,不会作为外层createEvent函数的返回值,而createEvent本身没有写顶层return语句,默认返回undefined,外层await自然拿不到插入结果。
修复代码
只需要修改controller.js即可,去掉回调,使用纯async/await写法,错误会自动抛出被路由层的try/catch捕获:
exports.createEvent = async(data) => { const eventObj = { name : data.name, description : data.desc, type : data.type, startDate : new Date() } // 同步创建文档实例,不需要await const event = new Event(eventObj); // 不传回调时save()返回Promise,await等待写入完成后直接返回结果 const savedEvent = await event.save(); return savedEvent; }
注意:Mongoose所有内置方法只要不传回调参数,就会默认返回Promise,可以直接搭配async/await使用,不需要额外包装。如果传了回调,方法就不会返回Promise,两种写法不要混用。
路由层代码不需要调整,修复后await createEvent(req.body)就能正常拿到插入后的文档对象。
内容的提问来源于stack exchange,提问作者Ajith
相关产品推荐
相关产品推荐

