首页 > 解决方案 > 将 bufferCommands 设置为 false 在 MongooseJs 中不起作用

问题描述

我正在使用 MongooseJs 创建和读取数据库。我需要我的 Mongoose 在请求时立即显示数据库连接错误。但猫鼬不断缓冲连接错误。我还尝试将 bufferCommands 设置为 false。但没有运气......还有其他方法吗?

我正在使用猫鼬 v5.8.13 和节点 v10.16.0

提前致谢

标签: node.jsdatabasemongodbrestmongoose

解决方案


您还必须设置 bufferMaxEntries = 0。

传下去;{ bufferMaxEntries:0, } 作为 mongoose.connect(uri,options) 的选项和;

{ bufferCommands:false } 作为新 Schema(colName,schema,options) 的选项。

bufferCommands 是特定于猫鼬的。Mongodb 驱动程序有自己的缓冲机制,必须通过设置 bufferMaxEntries:0 并将其作为选项与连接字符串一起传递来禁用。这将在“断开连接”事件时立即停止所有缓冲。

更新:请注意,{bufferMaxEntries:0} 已被弃用,并且在将 {useUnifiedTopology:true} 传递给 mongodb 驱动程序时不起作用。看起来 UnifiedTopology 在超时后可能不会执行缓冲操作(默认为 30 秒,可以使用 serverSelectionTimeoutMS 更改)。

简而言之,将 mongoose 模式中的 bufferCommands 设置为 false,并将 mongoose 中的 useUnifiedTopology:true 和 serverSelectionTimeoutMS 设置为尽可能低。我建议使用 5000 毫秒来快速捕捉和响应失败的操作。较低的数字可能不是最佳的。我无法建立值小于 1000 毫秒的初始连接。


推荐阅读