sql >> Database teknologi >  >> NoSQL >> MongoDB

Lyt til genforbindelseshændelser i MongoDB-driveren

Selvfølgelig kan du det. Dybest set selv om du skal bruge EventEmitter på et lavere niveau end dybest set uden for MongoClient sig selv.

Du kan tydeligt se, at sådanne ting findes, da de er synlige i "logning", som kan slås til i driveren via indstillingen:

{ "loggerLevel": "info" }

Fra da er det egentlig bare et spørgsmål om at trykke på den faktiske kildesender. Jeg har gjort disse i den følgende liste, samt inkluderet et lille trick til at få de opregnede hændelser fra en given udsendt, som ganske vist blev brugt af mig selv til at spore dette ned:

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)
  }

})()

Så de to lyttere definerede:

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

Kommer til at fyre, når forbindelsen falder, og når en genforbindelse er opnået. Der er også andre ting som gentilslutningsforsøg, som også er i hændelsessenderen, ligesom du ville se med loggerLevel indstilling slået til.




  1. Mongodb Aggregation tæller array/sæt størrelse

  2. Konvertering af isodate til numerisk værdi

  3. Hvor ofte skal jeg åbne/lukke min Booksleeve-forbindelse?

  4. Hvordan returnerer man ISO-datoformat i PHP til MongoDB?