Mongodb

在 Mongoose 中處理“MongoError:首次連接時無法連接到伺服器”的最佳方法

  • April 12, 2019

在這個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);

最終,您需要確保您的應用程序始終能夠連接到數據庫,而不是徒勞地將模型函式執行到緩衝區中。

有一個禁用緩衝的選項,但我不確定這將如何影響性能。

引用自:https://serverfault.com/questions/886661