Mongodb
在 Mongoose 中處理“MongoError:首次連接時無法連接到伺服器”的最佳方法
在這個GitHub issue for mongoose中,開發人員表示,如果與 MongoDB 的初始數據庫連接失敗,則會導致 Node.js 程序崩潰。它這樣做而不是嘗試重新連接。
在我的程式碼中,我發現了這個錯誤,因為我想記錄它。
var mongooseOptions = { useMongoClient: true, reconnectInterval: 10000, reconnectTries: Number.MAX_VALUE }; mongoose.connect(connectionString, mongooseOptions) .catch(err => { logger.error('Mongodb first connection failed: ' + err.stack); // what to do here? - process.exit(0); maybe? });
但在那之後,最好的做法是什麼?崩潰程序?或編寫我自己的重新連接邏輯?我可能應該提到,它
mongodb.service
被列為node.service
啟動的要求(在 linux 中使用 systemd)。[Unit] After=mongodb.service ...
我也不確定我能期望多久會看到這種情況發生。
我也使用過本指南,但找不到明確的答案。
我也在尋找你問題的答案。到目前為止,在我的搜尋中,我相信呼叫 process.exit 是最好的方法。因為 Mongoose 讓您可以立即開始使用模型,而無需等待 mongoose 建立與 MongoDB 的連接。那是因為貓鼬在內部緩衝了模型函式呼叫。
從 Mongoose 5.0.10 開始 - 如果您使用未連接的模型,Mongoose 預設不會拋出任何錯誤。
如果您的連接無法重新連接,那麼您的應用程序認為它正在通過緩衝區執行模型操作,而實際上它會失敗。
我已經看到開發人員添加了一個額外的 Mongodb URI,如下所示:
mongoose.connect(URI1||URI2);
最終,您需要確保您的應用程序始終能夠連接到數據庫,而不是徒勞地將模型函式執行到緩衝區中。
有一個禁用緩衝的選項,但我不確定這將如何影響性能。