最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to catch error in node mySQL queries? - Stack Overflow

programmeradmin0浏览0评论

I use nodejs and mysql for my app. I do the DB query in such manner:

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

But this is do not work because of async query func. So how to catch those errors, which is can occur in callback? Please help.

I use nodejs and mysql for my app. I do the DB query in such manner:

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

But this is do not work because of async query func. So how to catch those errors, which is can occur in callback? Please help.

Share Improve this question asked Oct 26, 2018 at 17:24 NastroNastro 1,7698 gold badges24 silver badges42 bronze badges 0
Add a ment  | 

2 Answers 2

Reset to default 3

You can't throw inside of async code with callbacks. You must use async error handling:

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

      return
    }

    ...
  }
}

It's up to the caller to provide a suitable callback function that takes (err, response) or something similar. It's also the responsibility of the caller to intercept, handle, or forward any and all errors.

If you use Promise-driven code you can either use .catch() or async functions with await that will work inside try. Sequelize is a good Promise-driven database driver.

Then you have code that looks like this:

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

Which is obviously a lot cleaner.

You could use this example:

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);
}

for example. if "Table" does not exist, you would have the response:

'Table' doesn't exist

EDIT:

what @tadman says is correct, if you use if (err) throw err, you are only generating an exception error and you lose what you need.

发布评论

评论列表(0)

  1. 暂无评论