sql >> Databáze >  >> NoSQL >> MongoDB

Poslouchejte události opětovného připojení v ovladači MongoDB

Jistě že můžeš. V podstatě i když potřebujete využít EventEmitter na nižší úrovni než v podstatě mimo MongoClient sám.

Jasně vidíte, že takové věci existují, protože jsou viditelné v "protokolování", které lze zapnout v ovladači pomocí nastavení:

{ "loggerLevel": "info" }

Od té doby je to opravdu jen otázka napojení na skutečný zdroj emitoru. Udělal jsem to v následujícím seznamu a také jsem zahrnul malý trik pro získání vyjmenovaných událostí z daného emitovaného, ​​který jsem samozřejmě použil při sledování tohoto:

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

})()

Takže tito dva posluchači definovali:

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

Spustí se, když se spojení přeruší a když je dosaženo opětovného připojení. Existují také další věci, jako jsou pokusy o opětovné připojení, které jsou také v emitoru událostí, stejně jako byste viděli u loggerLevel nastavení zapnuto.




  1. Výpis poslední zprávy každé konverzace zahrnující uživatele v MongoDB

  2. Jak vrátit data z MongoDB

  3. Použití parametru maxTimeMS s agregačními dotazy na Mongo 2.6 a Pymongo 2.7.1

  4. Jak definovat vlastního pomocníka dotazu v modelu mongoose pomocí strojopisu?