Как установить тайм-аут подключения MongoClient?

#javascript #mongodb

#javascript #mongodb

Вопрос:

У меня есть сервер, который сначала подключается к экземпляру MongoDB, а затем запускает веб-сервер. Если экземпляр MongoDB недоступен, нет смысла запускать веб-сервер, поэтому я думаю, что мне нужно как-то установить тайм-аут, скажем, на 5 секунд.

Как мне это сделать?

Вот мой код:

 MongoClient.connect(Config.database.url).then((db) => {
        console.log('Connected to MongoDB');
        databaseInstance = db;
       // start web server
    })
  

Ответ №1:

  • Чтобы определить тайм-аут для первоначального использования соединения serverSelectionTimeoutMS .
  • Чтобы определить тайм-аут для текущего соединения connectTimeoutMS

Пример подключения MongoDB 3.6:

 const client = new MongoClient(Config.database.url, {
  connectTimeoutMS: 5000,
  serverSelectionTimeoutMS: 5000
})

client.connect(err => {
  console.log('Connected to MongoDB')
  // ..
})
  

Смотрите Официальные документы для serverSelectionTimeoutMS

Комментарии:

1. Спасибо — это именно то, что я (и я подозреваю, что OP, несмотря на то, что другой ответ был отмечен как правильный) искал. connectTimeoutMS не было тайм-аута начального соединения. serverSelectionTimeoutMS это именно то, что мы хотим.

2. serverSelectionTimeoutMS указывает, как долго (в миллисекундах) блокировать выбор сервера перед выдачей исключения — это не только для начального соединения, как подразумевается в этом ответе

Ответ №2:

вы можете использовать «connectTimeoutMS» следующим образом

 MongoClient.connect(Config.database.url, {
    server: {
        socketOptions: {
            connectTimeoutMS: 5000
        }
    }
}).then((db) => {
    console.log('Connected to MongoDB');
    databaseInstance = db;
   // start web server
})
  

Вот дополнительная информация об этом…

http://mongodb.github.io/node-mongodb-native/2.0/reference/connecting/connection-settings/
https://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html

Комментарии:

1. На самом деле я не думаю, что это то, чего хочет OP (несмотря на то, что они помечают это как принятое). connectTimeoutMS это не то, что большинство людей сочло бы таймаутом соединения. Смотрите ответ @ Ricky’s ниже.