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

如何正确连接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,需要修改模型文件,让模型基于指定连接创建:

  1. 修改User.js:
const mongoose = require('mongoose')

const userSchema = new mongoose.Schema({
    name: String
})

// 导出函数,接收连接实例来创建模型
module.exports = (connection) => {
  return connection.model('User', userSchema)
}
  1. 修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:06:13