使用mongoose连接mongodb的TImeout

Dan*_*Dan 13 mongoose mongodb node.js

我有一个在Node,express和MongoDB上运行的Web应用程序.我使用猫鼬作为ODM.当我用mongodb版本v3.0.1测试我的应用程序时,它运行正常并且没有错误.但是当我运行相同的代码v3.2.10时,我会在一段时间后得到连接超时.

我收到以下错误:

Error: connection timeout at null.<anonymous> (/webapp/node_module/mongoose/lib/drivers/node-mongodb-native/connection.js:186:17)
Run Code Online (Sandbox Code Playgroud)

我使用mongoose.connect进行与本地mongodb实例的数据库连接.连接方式有什么变化吗?

小智 15

我刚才有这个问题.这一切都取决于哪个版本的mongoosemongodb-core您正在使用.现在,您必须指定以下参数:

mongoose.connect("mongodb://user:password@address/db", {
  server: {
    socketOptions: {
      socketTimeoutMS: 0,
      connectionTimeout: 0
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

但是,就在昨天,正确的参数在哪里

mongoose.connect("mongodb://user:password@address/db", {
  server: {
    socketOptions: {
      socketTimeoutMS: 0,
      connectTimeoutMS: 0
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

我真的不知道该相信什么了..


Mik*_*ike 8

我意识到这是一个老问题,但接受的答案现在包含已弃用的代码。要使用 Mongoose v5+ 设置连接超时,您现在需要将所有选项放在选项对象的顶层,而不是像以前那样嵌套:

mongoose.connect(uri, {
  useUnifiedTopology: true, // For Mongoose 5 only. Remove for Mongoose 6+
  serverSelectionTimeoutMS: 1000, // Defaults to 30000 (30 seconds)
})
Run Code Online (Sandbox Code Playgroud)