You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:18:14