如何从MongoDB中正确捕获异常?

时间:2019-09-30 12:31:37

标签: javascript node.js mongodb nodemon

问题

如果我的try在MongoClients catch函数内部,则不会出现connect错误


环境

  • Linux(薄荷,泰莎)
  • 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

但这不起作用

如果我在MongoDB的connect函数中尝试过:

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 :(得分:0)

尝试一下

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

如果您想尝试使用catch,请尝试以async-await/sequential风格编写代码。

在这里您可以看到您在回调中将err作为第一个参数,为什么它会捕获块? func1().then().catch()样式代码也会发生同样的事情。

  

注意:如果要使用await,请在函数名称前使用async关键字。

例如:

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'); }
   });
相关问题