如何在mongo connect失败时让节点退出

时间:2018-05-08 19:32:30

标签: node.js mongodb

如果无法连接到Mongo,我希望我的Node JS应用程序立即退出。我正在使用mongodb节点库。

我已将代码缩减为

const {MongoClient} = require('mongodb');
MongoClient.connect('mongodb://localhost:27017');

如果Mongo 正在运行,我会得到UnhandledPromiseRejectionWarning ECONNREFUSED,我完全可以预料到,但程序会挂起并且永不退出。这是使用Node版本10.0.0。

由于连接从未成功,我没有要关闭的连接句柄。我已经尝试了各种方法catch被拒绝的承诺,但我没有成功让程序退出。

在这种情况下,我需要做什么来关闭MongoClient并让程序退出?

1 个答案:

答案 0 :(得分:2)

您的应用程序仍处于活动状态,因为它正在尝试reconnect。您可以尝试禁用recconect:

MongoClient.connect('mongodb://localhost:27017', {
  autoReconnect: false
}, (err, client) => {
  if (client) client.close();
});

或者,您可以使用process.exit(1)终止该过程以终止该程序。

const {
  MongoClient
} = require('mongodb');

// Callback syntax
MongoClient.connect('mongodb://localhost:27017', (err, db) => {
  if (err) process.exit(1);
});

// Promise syntax
MongoClient
  .connect('mongodb://localhost:27017')
  .catch(err => {
    process.exit(1);
  });

// Async/await syntax
(async function() {
  let db;
  try {
    db = await MongoClient.connect('mongodb://localhost:27017');
  } catch (err) {
    process.exit(1);
  }
}());