3 回答

TA貢獻1856條經驗 獲得超5個贊
這似乎意味著您的節點服務器與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貢獻1802條經驗 獲得超4個贊
我知道Jason的答案已被接受,但是Mongoose遇到了同樣的問題,并且發現托管我的數據庫的服務建議應用以下設置,以使Mongodb的連接在生產中保持活動狀態:
var options = {
server: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } },
replset: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } }
};
mongoose.connect(secrets.db, options);
我希望此回復可以幫助其他人遇到“拓撲已被破壞”錯誤。

TA貢獻1776條經驗 獲得超12個贊
此錯誤是由于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
}
}
);
- 3 回答
- 0 關注
- 1125 瀏覽
添加回答
舉報