【问题标题】:Make node wait for mongoDB to start让节点等待 mongoDB 启动
【发布时间】:2018-09-30 06:37:15
【问题描述】:

我使用 pm2 一起启动我的数据库和我的 express 节点 Web 服务器。当我用pm2 start all 启动它们时,它工作正常; mongod 在 node 之前启动,它可以连接。但是当我使用pm2 reload all 时,节点无法连接到数据库,因为它在 mongod 完全初始化之前尝试连接。这与启动web服务器而不是mongod基本相同。

如果 Web 服务器失败,如何让 Web 服务器重试连接到 mongod?在 node mongo 驱动中有一个叫做 reconnect 的功能,但它只适用于之前有连接的丢失连接。

【问题讨论】:

    标签: node.js mongodb pm2


    【解决方案1】:

    发生错误时,您可以调用另一个连接函数,或者如果您使用 Promise,则可以使用标准循环重试。

    //call the following in an async function
    var db = null
    while (db === null) {
      try {
        db = await Promise((resolve, reject) => {
          MongoClient.connect("mongodb://localhost:27017/MyDb", function (err, db) {
            if (err) reject(err);
            resolve(db)
          })
        })
        //insert a sleep so you're waiting a bit to reconnect
      } catch (e) {
        console.log(e)
      }
    }
    

    【讨论】:

    • 您如何设想“插入睡眠”?我会将整个事情包装在一个使用 setTimeout 调用自身的半递归函数中
    • 您可以在初始承诺中使用 setTimeout
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 2021-10-04
    相关资源
    最近更新 更多