Как заставить узел выйти при сбое монго - PullRequest
0 голосов
/ 08 мая 2018

Я бы хотел, чтобы мое приложение Node JS немедленно закрывалось, если оно не может подключиться к Mongo. Я использую библиотеку узлов mongodb.

Я уменьшил код до

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

Если Mongo не запущен, я получаю UnhandledPromiseRejectionWarning с ECONNREFUSED, что я полностью ожидаю, но затем программа зависает и никогда не завершается. Это с версией узла 10.0.0.

Так как соединение никогда не было успешным, у меня нет дескриптора соединения, чтобы закрыться. Я пытался различными способами catch отклонить обещание, но мне не удалось заставить программу выйти.

Что мне нужно сделать, чтобы закрыть MongoClient и заставить программу выйти в этом случае?

1 Ответ

0 голосов
/ 08 мая 2018

Ваше приложение остается активным, потому что оно пытается переподключить . Вы можете попробовать отключить 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);
  }
}());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...