Natuurlijk kan je dat. In principe moet je echter op een lager niveau gebruikmaken van de EventEmitter dan in feite van de MongoClient
zelf.
Je kunt duidelijk zien dat dergelijke dingen bestaan, aangezien ze zichtbaar zijn in "logging", die kan worden ingeschakeld in de driver via de instelling:
{ "loggerLevel": "info" }
Vanaf dat moment is het eigenlijk gewoon een kwestie van de daadwerkelijke bronzender aanboren. Ik heb dit gedaan in de volgende lijst, evenals een kleine truc toegevoegd om de opgesomde gebeurtenissen van een bepaalde uitgezonden te krijgen, die weliswaar door mezelf werd gebruikt om dit op te sporen:
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)
}
})()
Dus die twee luisteraars definieerden:
db.s.topology.on('close', () => console.log('Connection closed') );
db.s.topology.on('reconnect', () => console.log('Reconnected') );
Gaan af wanneer de verbinding wegvalt en wanneer er opnieuw verbinding wordt gemaakt. Er zijn ook andere dingen, zoals pogingen om opnieuw verbinding te maken die ook in de gebeurteniszender zitten, net zoals je zou zien met de loggerLevel
instelling ingeschakeld.