Mongoose执行find()接口缓冲超时10000ms问题排查求助
排查解决思路
- 检查wokcommands初始化执行时机
确保查询代码在wokcommands完全初始化完成后再执行,wokcommands提供了
databaseConnected事件,你可以把这段查询逻辑放到该事件的回调函数内执行,避免逻辑执行早于数据库连接建立完成。
- 校验mongoose连接状态
在执行find()前插入调试代码确认连接状态:
console.log('Mongoose连接状态:', mongoose.connection.readyState)
返回值为1才代表连接已就绪,若返回值为2(连接中)时执行查询就会触发缓冲超时。
- 检查模型注册与拼写
你报错信息中的模型名为blacklistScema,注意拼写是否和你实际定义的blackListSchema完全一致,同时确认该模型是注册到了和wokcommands共用的同一个mongoose实例上,不要重复引入mongoose模块。 - 排查多mongoose实例冲突
执行命令查看当前项目中是否存在多个mongoose版本:
npm ls mongoose
若输出多个版本实例,说明wokcommands内置的mongoose和你手动安装的5.12.6版本冲突,wokcommands建立的连接是在内置mongoose实例上的,你自己引入的mongoose实例并未建立连接,就会触发缓冲超时。可直接卸载你手动安装的mongoose,统一使用wokcommands内置的版本即可解决。
- 调整连接参数
在wokcommands初始化传入mongo连接配置时,追加如下参数:
{ useUnifiedTopology: true, bufferTimeoutMS: 30000, }
延长缓冲超时时间,同时适配MongoDB新的拓扑结构。
- 简化查询语法
你当前代码混合了await和then两种异步写法,可调整为纯async/await写法排除语法层面干扰:
try { const data = await blackListSchema.find() if (data) { data.forEach((val) => { blacklistedWords.set(val.guild, val.words) }) } } catch (err) { console.error(err) }
- 检查数据库服务状态
确认你的MongoDB服务运行正常,若使用云数据库(如MongoDB Atlas)需检查当前服务器IP是否在白名单内,没有被限制访问。
内容的提问来源于stack exchange,提问作者Typical Username
相关产品推荐
相关产品推荐

