如何捕捉节点mysql查询中的错误?

k5hmc34c  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(338)

我的应用程序使用nodejs和mysql。我以以下方式执行db查询:

try {
    myDB.query(SQL, object, (err, res) => {
        if (err) throw err
        ...
    }
} catch (err) {
    console.log(err.message)
}

但由于异步,这是不工作的 query 功能。那么如何捕捉回调中可能发生的错误呢?请帮忙。

fkvaft9z

fkvaft9z1#

你不能 throw 包含回调的异步代码内部。必须使用异步错误处理:

function makeQuery(callback) {
  myDB.query(SQL, object, (err, res) => {
    if (err) {
      callback(err)

      return
    }

    ...
  }
}

由调用方提供适当的回调函数 (err, response) 或者类似的东西。调用者也有责任拦截、处理或转发所有错误。
如果您使用承诺驱动的代码,您可以使用 .catch() 或者 async 具有的函数 await 在里面会有用的 try . sequelize是一个很好的promise驱动的数据库驱动程序。
然后你有这样的代码:

let result = await myDB.query(SQL, object)

显然要干净得多。

wyyhbhjk

wyyhbhjk2#

您可以使用以下示例:

try {
  connection.query('SELECT * FROM ??',[Table], function (err) {
    if (err) console.error('err from callback: ' + err.stack);
  });
} catch (e) {
  console.error('err thrown: ' + err.stack);
}

例如。如果“table”不存在,您将得到以下响应:

'Table' doesn't exist

编辑:
@tadman所说的是正确的, if you use if (err) throw err ,您只会生成一个异常错误,并且会丢失所需的内容。

相关问题