处理Mongoose断开连接

dldeef67  于 2022-11-13  发布在  Go
关注(0)|答案(2)|浏览(391)

我正在使用 Mongoose 4.13.7
我想连接到mongo,但如果发生错误,我想重新连接。但在5次重新连接后,如果发生错误,进程应该退出。
这是代码:

var count = 0;
handleDisconnect();
function handleDisconnect(){
    count++;
    console.log('Trying to connect to mongo. Attempt : ' + count);
    mongoose.connect(config.mongo.uri,{useMongoClient:true});
    mongoose.connection.on('error',(error)=>{
        if (count >= 5){
            console.log('Mongo ERROR');
            console.error(error);
            process.exit(1);
        }
        else{
            setTimeout(handleDisconnect,1000);  
        }
    });
    mongoose.connection.on('open',()=>{
        console.log('Connected to mongo at ' + Date.now());
    });
}

我已经把代码的输出也贴出来了。我不明白尝试次数怎么会超过5次?还有内存泄漏警告和node:6804错误信息。我做错了什么?
Output of the code

5rgfhyps

5rgfhyps1#

每次发出error事件时,都要为该事件附加一个事件侦听器。这会导致内存泄漏警告,并且还会使回调函数在每次事件发生时运行多次。不应在handleDisconnect()函数内添加事件处理程序。
示例:

function handleDisconnect(mongoError) {
  // check error reason, increment counters, check if errors limit reached
}

mongoose.connection.on('error', handleDisconnect);
mf98qq94

mf98qq942#

当Mongoose失去与MongoDB服务器的连接时,您需要检查disconnected事件。此事件可能是由于您的代码显式关闭了连接、数据库服务器崩溃或网络连接问题。

mongoose.connection.on('disconnected', () => console.log('Server disconnected from mongoDB'));

错误事件:如果连接上发生错误(如由于格式错误的数据或负载大于16MB而导致的parseError),则发出此消息。
https://mongoosejs.com/docs/connections.html#connection-events

相关问题