できますよ。基本的には、基本的にMongoClient
よりも低いレベルでEventEmitterを利用する必要があります。
設定を介してドライバーでオンにできる「ログ」に表示されるため、このようなものが存在することがはっきりとわかります。
{ "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)
}
})()
したがって、これら2つのリスナーは次のように定義されています。
db.s.topology.on('close', () => console.log('Connection closed') );
db.s.topology.on('reconnect', () => console.log('Reconnected') );
接続が切断されたとき、および再接続が達成されたときに起動します。 loggerLevel
で表示されるのと同じように、イベントエミッターにもある再接続の試行などの他のものもあります。 設定がオンになっています。