Как правильно отловить исключение из MongoDB? - PullRequest
1 голос
/ 30 сентября 2019

Проблема

Моя try не catch ошибка, если она находится внутри MongoClients connect функция


Среда

  • Linux (Mint, Tessa)
  • Node.js v10.16.0 (используется ES6 с nodemon )
  • MongoClient (из репозитория mongodb npm)

Пример

Если я попробую это:

try {
    throw new Error('This is error');
} catch(e) {
    console.log(`Catched: ${e}`);
}

Я получу чистый выход (все нормально - работает)

Catched: Error: This is error
[nodemon] clean exit - waiting for changes before restart

Но это не работает

Если я попробую в MongoDBs подключить функцию:

try {
   MongoClient.connect(config.url, config.options, (err, db) => {
      if (err) { throw new Error('This is error'); }
   });
} catch (err) {
   console.log(`Catched: ${e}`);
}

Я получаю приложение упало

Error: This is error
[nodemon] app crashed - waiting for file changes before starting...

Так что это означает, что это не уловило мое исключение.

1 Ответ

0 голосов
/ 30 сентября 2019

Попробуйте это

try {
   let db = await MongoClient.connect(config.url, config.options);
} catch (err) {
   console.log(`Catched: ${err}`);
}

Попробуйте написать код в стиле async-await/sequential, если хотите попробовать catch для работы.

Здесь вы можете видеть, что вы получаете err в качестве первого аргумента в обратном вызове, с чего бы это пошло на перехват блока? То же самое происходит с кодом стиля func1().then().catch().

Примечание: используйте ключевое слово async перед именем вашей функции, если вы хотите использовать await.

например:

async function test() {
   try {
   let db = await MongoClient.connect(config.url, config.options);
} catch (err) {
   console.log(`Catched: ${err}`);
} 
}

MongoClient.connect(config.url, config.options, (err, db) => {
      if (err) { throw new Error('This is error'); }
   });
...