【问题标题】:Setting bufferCommands to false not working in MongooseJs将 bufferCommands 设置为 false 在 MongooseJs 中不起作用
【发布时间】:2020-06-01 01:56:57
【问题描述】:

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

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

提前致谢

【问题讨论】:

  • 当出现数据库连接错误时,会发出一个connection(error)事件,你可能想尝试设置一个监听器或这个事件。更多详情here.
  • @OTZ 我也尝试了连接事件。它会在断开连接 30 秒后发出通知。如果我的数据库连接断开,我需要立即通知

标签: node.js database mongodb rest mongoose


【解决方案1】:

您还必须设置 bufferMaxEntries = 0。

继续; { 缓冲区最大条目:0, } 作为 mongoose.connect(uri,options) 和的选项;

{ 缓冲区命令:假 } 作为新架构的选项(colName,schema,options)。

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

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

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

【讨论】:

    猜你喜欢
    • 2013-04-22
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 2016-07-10
    • 2021-12-11
    • 2013-04-23
    • 2017-05-13
    • 2012-07-07
    相关资源
    最近更新 更多