gpt4 book ai didi

node.js - 在 MongoDB 驱动程序中监听重新连接事件

转载 作者:可可西里 更新时间:2023-11-01 09:24:02 25 4
gpt4 key购买 nike

我想向 MongoDB 连接添加事件监听器,以便在连接断开、每次重新连接尝试和成功重新连接尝试时运行一些东西。

我阅读了所有官方文档和 API,但找不到解决方案。

目前,我有这个,但只有超时事件有效。 //如果我们还没有初始化一个“MongoClient”,初始化一个并保存它。 if(!this.client) this.client = new MongoClient();

    this.connection = await this.client.connect(connectionString, this.settings);

this.client.server.on('connect', event => {
console.log(event);
});

this.client.server.on('error', event => {
console.log(event);
});

this.client.server.on('reconnect', event => {
console.log(event);
});

this.client.server.on('connections', event => {
console.log(event);
});

this.client.server.on('timeout', event => {
console.log(event);
});

this.client.server.on('all', event => {
console.log(event);
});

我尝试了此处列出的事件,它们都有效,但没有“重新连接”事件: http://mongodb.github.io/node-mongodb-native/2.2/reference/management/sdam-monitoring/

最佳答案

当然可以。基本上,虽然您需要在比 MongoClient 本身更低的级别上接入 EventEmitter。

你可以清楚地看到这样的东西存在,因为它们在“日志记录”中可见,可以通过设置在驱动程序中打开:

{ "loggerLevel": "info" }

从那时起,它真的只是一个进入实际源发射器的问题。我已经在下面的 list 中完成了这些,还包括了一个从给定发出的事件中获取枚举事件的小技巧,我承认我在跟踪这个问题时使用了这个技巧:

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)
}

})()

所以这两个听众定义:

    db.s.topology.on('close', () => console.log('Connection closed') );
db.s.topology.on('reconnect', () => console.log('Reconnected') );

将在连接断开和重新连接时触发。还有其他事情,例如重新连接尝试,它们也在事件发射器中,就像您在 loggerLevel 设置打开时看到的一样。

关于node.js - 在 MongoDB 驱动程序中监听重新连接事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45124079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com