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

Node.js中Mongoose连接报错:connection.once(...).catch不是函数求解决

问题原因

connection.once() 是 Node.js EventEmitter 的原生方法,它不返回 Promise,因此无法链式调用 .catch() 方法——这就是你遇到 TypeError: connection.once(...).catch is not a function 错误的核心原因。

修复方案

根据 Mongoose 的连接逻辑,提供两种实用的正确写法:

方案1:通过监听 error 事件处理连接异常

直接给 connection 对象绑定 error 事件监听器,捕获连接过程中的错误:

// 先监听错误事件,确保能捕获连接失败的异常
connection.on('error', (err) => {
  console.error('数据库连接失败:', err);
});

// 监听连接成功事件
connection.once('open', () => {
  console.log('DB Connected!');
});

方案2:使用 Mongoose 连接的 Promise 链式调用(推荐)

如果你是通过 mongoose.connect() 初始化连接,该方法本身返回 Promise,可以直接用 .then() 和 .catch() 处理结果:

const mongoose = require('mongoose');

mongoose.connect('你的数据库连接URL')
  .then(() => {
    console.log('DB Connected!');
  })
  .catch((err) => {
    console.error('数据库连接失败:', err);
  });

或者更简洁的 async/await 写法:

const mongoose = require('mongoose');

async function initDBConnection() {
  try {
    await mongoose.connect('你的数据库连接URL');
    console.log('DB Connected!');
  } catch (err) {
    console.error('数据库连接失败:', err);
    process.exit(1); // 可选:连接失败时退出进程,避免服务挂起
  }
}

initDBConnection();

内容的提问来源于stack exchange,提问作者Rohan Hoval

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:33:12