Разбира се, че можеш. По принцип обаче трябва да се докоснете до EventEmitter на по-ниско ниво от основното извън MongoClient
себе си.
Можете ясно да видите, че такива неща съществуват, тъй като са видими в „регистриране“, което може да бъде включено в драйвера чрез настройката:
{ "loggerLevel": "info" }
Оттогава наистина е само въпрос на докосване до действителния източник на емитер. Направих ги в следния списък, както и включих малък трик за получаване на изброените събития от даден емитент, който наистина беше използван от мен при проследяването на това:
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)
}
})()
И така, тези два слушателя дефинираха:
db.s.topology.on('close', () => console.log('Connection closed') );
db.s.topology.on('reconnect', () => console.log('Reconnected') );
Ще се задействат, когато връзката прекъсне и когато бъде постигнато повторно свързване. Има и други неща като опити за повторно свързване, които също са в излъчвателя на събития, точно както бихте видели с loggerLevel
настройката е включена.