猿问

mongoError:拓扑已被破坏

我有一个用Restify和Mongoose在node.js中构建的REST服务,以及一个mongoDB,它的集合包含大约30.000个常规大小的文档。我的节点服务通过pmx和pm2运行。


昨天,节点突然开始通过消息“ MongoError:拓扑已被破坏”消除错误,仅此而已。我不知道这是什么意思,可能触发了什么。谷歌搜索时也没有太多发现。所以我想在这里问。


今天重新启动了节点服务后,错误停止了出现。我也有一个正在生产中运行,并且让我害怕的是,这可能在任何给定时间发生在运行在那里的安装程序的相当关键的部分...


我正在使用以下版本的提及的软件包:


猫鼬:4.0.3

重新调整:3.0.3

节点:0.10.25


慕丝7291255
浏览 1070回答 3
3回答

RISEBY

这似乎意味着您的节点服务器与MongoDB实例的连接在尝试写入时已中断。看一下产生该错误的Mongo源代码Mongos.prototype.insert = function(ns, ops, options, callback) {    if(typeof options == 'function') callback = options, options = {};    if(this.s.state == DESTROYED) return callback(new MongoError(f('topology was destroyed')));    // Topology is not connected, save the call in the provided store to be    // Executed at some point when the handler deems it's reconnected    if(!this.isConnected() && this.s.disconnectHandler != null) {      callback = bindToCurrentDomain(callback);      return this.s.disconnectHandler.add('insert', ns, ops, options, callback);    }    executeWriteOperation(this.s, 'insert', ns, ops, options, callback);}这似乎与注释中提到的Sails问题无关,因为未安装任何升级来加速崩溃或“修复”

慕虎7371278

我知道Jason的答案已被接受,但是Mongoose遇到了同样的问题,并且发现托管我的数据库的服务建议应用以下设置,以使Mongodb的连接在生产中保持活动状态:var options = {  server: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } },  replset: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } }};mongoose.connect(secrets.db, options);我希望此回复可以帮助其他人遇到“拓扑已被破坏”错误。

叮当猫咪

此错误是由于mongo驱动程序出于任何原因断开连接(例如,服务器已关闭)。默认情况下,猫鼬会尝试重新连接30秒钟,然后停止重试并永久抛出错误,直到重新启动为止。您可以通过在连接选项中编辑这两个字段来更改此设置mongoose.connect(uri,     { server: {         // sets how many times to try reconnecting        reconnectTries: Number.MAX_VALUE,        // sets the delay between every retry (milliseconds)        reconnectInterval: 1000         }     });
随时随地看视频慕课网APP

相关分类

Node.js
MongoDB
我要回答