Tentu kamu bisa. Pada dasarnya meskipun Anda perlu memasuki EventEmitter pada tingkat yang lebih rendah daripada pada dasarnya dari MongoClient
sendiri.
Anda dapat melihat dengan jelas bahwa hal-hal seperti itu ada karena terlihat di "logging", yang dapat diaktifkan pada driver melalui pengaturan:
{ "loggerLevel": "info" }
Sejak saat itu benar-benar hanya masalah memanfaatkan emitor sumber yang sebenarnya. Saya telah melakukan ini dalam daftar berikut, serta memasukkan sedikit trik untuk mendapatkan peristiwa yang disebutkan dari pancaran tertentu, yang memang digunakan oleh saya sendiri dalam melacak ini:
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)
}
})()
Jadi kedua pendengar itu mendefinisikan:
db.s.topology.on('close', () => console.log('Connection closed') );
db.s.topology.on('reconnect', () => console.log('Reconnected') );
Akan menyala saat koneksi terputus, dan saat koneksi ulang tercapai. Ada juga hal-hal lain seperti upaya menyambung kembali yang juga ada di emitor acara seperti yang Anda lihat dengan loggerLevel
setelan diaktifkan.