Ошибка соединения с mongodb приводит к зависанию модуля kubernetes и перезапуску модуля устраняет проблему - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть приложение nodejs, которое использует mongodb и работает на k8s.Но у меня возникает проблема, когда я меняю адрес mogodb, модуль k8s зависает, и мне приходится перезагружать модуль, чтобы он снова заработал.Поэтому я думаю, что это происходит потому, что в этот момент происходит сбой службы узлов.Как я могу написать свой код для подключения к mongodb таким образом, чтобы приложение nodejs не зависало, если не удается подключиться к mongodb, или mondodb не работает или что-то там происходит.Мой текущий код

exports.connect = function() {
    return MongoClient.connect(mongourl);
};

1 Ответ

0 голосов
/ 12 сентября 2018

Итак, вы хотите, если соединение с Монго не удается это не должно вывести приложение из строя. Вы можете просто обработать обратный вызов error и делать все, что захотите. в моем случае я подключаю БД, если она не работает. как показано ниже:

    var mongoose = require('mongoose');
    var connection = mongoose.connection;    

    connection
      .on('error', function (err) {
        console.log("Error in MongoDB Connection");
        console.error(err);
      })
      .on('disconnected', reConnect)
      .once('open', listen);

    connection.on('reconnected', function () {
      console.log('MongoDB reconnected!');
    });

    function connect() {
              const connection = mongoose.connect(<mongo Uri here >, <connection options>,(err)=>{
                    reConnect();
                  });
              return connection;
        }

        function reConnect() {

          if (mongoose.connection.readyState == 0) {
            console.log(mongoose.connection.readyState);
            //you can just try to connect here now.
            // connect();
          }
          else {
            console.log("I am already Connected");
          }
        }
connect();
module.exports =  mongoose;

поэтому я использовал mongoose здесь, вы можете следовать тому, как я обработал ошибку. Mongoclient Docs Я видел, он также поддерживает обратный вызов. так что вы, вероятно, можете обработать ошибку таким же образом. хотя свойства типа .connection и все они могут не совпадать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...