3 回答
TA贡献1804条经验 获得超8个赞
这似乎意味着您的节点服务器与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问题无关,因为未安装任何升级来加速崩溃或“修复”
TA贡献1796条经验 获得超7个赞
我知道Jason的答案已被接受,但是Mongoose遇到了同样的问题,并且发现托管我的数据库的服务建议应用以下设置,以使Mongodb的连接在生产中保持活动状态:
var options = {
server: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } },
replset: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } }
};
mongoose.connect(secrets.db, options);
我希望此回复可以帮助其他人遇到“拓扑已被破坏”错误。
TA贡献1900条经验 获得超5个赞
此错误是由于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
}
}
);
添加回答
举报