Sûr que vous pouvez. Fondamentalement, vous devez puiser dans l'EventEmitter à un niveau inférieur à celui de MongoClient
lui-même.
Vous pouvez clairement voir que de telles choses existent puisqu'elles sont visibles dans la "journalisation", qui peut être activée dans le pilote via le paramètre :
{ "loggerLevel": "info" }
À partir de là, il s'agit simplement de puiser dans l'émetteur source réel. Je les ai faites dans la liste suivante, ainsi qu'une petite astuce pour obtenir les événements énumérés à partir d'un émis donné, qui a certes été utilisée par moi-même pour le retrouver :
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)
}
})()
Donc, ces deux écouteurs ont défini :
db.s.topology.on('close', () => console.log('Connection closed') );
db.s.topology.on('reconnect', () => console.log('Reconnected') );
Vont se déclencher lorsque la connexion est interrompue et lorsqu'une reconnexion est établie. Il y a aussi d'autres choses comme les tentatives de reconnexion qui sont également dans l'émetteur d'événement comme vous le verriez avec le loggerLevel
paramètre activé.