如何正确连接Mongoose到本地数据库?解决插入缓冲超时错误
解决MongooseError: Operation
users.insertOne() buffering timed out after 10000ms错误 问题根源
你使用mongoose.createConnection()创建了独立数据库连接,但定义User模型时用的是mongoose.model()——它默认绑定的是Mongoose的默认连接(由mongoose.connect()创建),而非你手动创建的con连接。这导致模型尝试使用未初始化的默认连接执行操作,请求一直处于缓冲状态直到超时。
解决方案
方案一:改用默认连接(推荐)
修改app.js,使用mongoose.connect()创建默认连接,并等待连接成功后再执行数据库操作:
const mongoose = require('mongoose') const User = require('./User') // 创建默认连接 mongoose.connect('mongodb://localhost/restApi') const con = mongoose.connection // 监听连接成功事件,确保连接就绪后再操作 con.on('open', () => { console.log('数据库连接成功') const user = new User({ name: 'Leo' }) user.save().then(() => console.log('User saved')) }) // 监听连接错误,排查连接问题 con.on('error', (err) => { console.error('数据库连接失败:', err) })
方案二:将模型绑定到手动创建的连接
如果必须使用createConnection,需要修改模型文件,让模型基于指定连接创建:
- 修改
User.js:
const mongoose = require('mongoose') const userSchema = new mongoose.Schema({ name: String }) // 导出函数,接收连接实例来创建模型 module.exports = (connection) => { return connection.model('User', userSchema) }
- 修改
app.js:
const mongoose = require('mongoose') const createUserModel = require('./User') // 创建独立连接 const con = mongoose.createConnection('mongodb://localhost/restApi') // 连接就绪后创建模型并执行保存 con.on('open', () => { console.log('数据库连接成功') const User = createUserModel(con) const user = new User({ name: 'Leo' }) user.save().then(() => console.log('User saved')) }) con.on('error', (err) => { console.error('数据库连接失败:', err) })
额外注意事项
- 确保本地MongoDB服务正在运行,可通过
mongod命令启动服务; - 所有数据库操作必须在连接成功后执行,避免在连接未就绪时发起请求,这是缓冲超时的常见诱因。
内容的提问来源于stack exchange,提问作者Gehmasse
相关产品推荐
相关产品推荐

