Så klart du kan. I princip måste du använda EventEmitter på en lägre nivå än i princip från MongoClient
sig själv.
Du kan tydligt se att sådana saker finns eftersom de syns i "loggning", som kan slås på i drivrutinen via inställningen:
{ "loggerLevel": "info" }
Från och med det är det egentligen bara att knacka på själva källsändaren. Jag har gjort dessa i följande lista, samt inkluderat ett litet trick för att få de uppräknade händelserna från en given emitterad, som visserligen användes av mig själv för att spåra detta:
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 två lyssnarna definierade:
db.s.topology.on('close', () => console.log('Connection closed') );
db.s.topology.on('reconnect', () => console.log('Reconnected') );
Kommer att avfyras när anslutningen avbryts och när en återanslutning har uppnåtts. Det finns också andra saker som återanslutningsförsök som också finns i händelsesändaren precis som du skulle se med loggerLevel
inställningen påslagen.