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.