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
相关产品推荐
相关产品推荐

