MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Écouter les événements de reconnexion dans le pilote MongoDB

Sûr que vous pouvez. Fondamentalement, vous devez puiser dans l'EventEmitter à un niveau inférieur à celui de MongoClient lui-même.

Vous pouvez clairement voir que de telles choses existent puisqu'elles sont visibles dans la "journalisation", qui peut être activée dans le pilote via le paramètre :

{ "loggerLevel": "info" }

À partir de là, il s'agit simplement de puiser dans l'émetteur source réel. Je les ai faites dans la liste suivante, ainsi qu'une petite astuce pour obtenir les événements énumérés à partir d'un émis donné, qui a certes été utilisée par moi-même pour le retrouver :

const MongoClient = require('mongodb').MongoClient;

function patchEmitter(emitter) {
  var oldEmit = emitter.emit;

  emitter.emit = function() {
    var emitArgs = arguments;

    console.log(emitArgs);

    oldEmit.apply(emitter, arguments);
  }

}


(async function() {

  let db;

  try {

    const client = new MongoClient();

    client.on('serverOpening', () => console.log('connected') );

    db = await client.connect('mongodb://localhost/test', {
      //loggerLevel: 'info'
    });

    //patchEmitter(db.s.topology);

    db.s.topology.on('close', () => console.log('Connection closed') );
    db.s.topology.on('reconnect', () => console.log('Reconnected') );


  } catch(e) {
    console.error(e)
  }

})()

Donc, ces deux écouteurs ont défini :

    db.s.topology.on('close', () => console.log('Connection closed') );
    db.s.topology.on('reconnect', () => console.log('Reconnected') );

Vont se déclencher lorsque la connexion est interrompue et lorsqu'une reconnexion est établie. Il y a aussi d'autres choses comme les tentatives de reconnexion qui sont également dans l'émetteur d'événement comme vous le verriez avec le loggerLevel paramètre activé.