Javascript 如何捕获节点mySQL查询中的错误?
我的应用程序使用nodejs和mysql。我以以下方式执行DB查询:Javascript 如何捕获节点mySQL查询中的错误?,javascript,mysql,node.js,Javascript,Mysql,Node.js,我的应用程序使用nodejs和mysql。我以以下方式执行DB查询: try { myDB.query(SQL, object, (err, res) => { if (err) throw err ... } } catch (err) { console.log(err.message) } 但这是不可行的,因为异步queryfunc。那么,如何捕获回调中可能发生的错误呢?请提供帮助。您不能将抛出带有回调的异步代码内部。您必须使
try {
myDB.query(SQL, object, (err, res) => {
if (err) throw err
...
}
} catch (err) {
console.log(err.message)
}
但这是不可行的,因为异步
query
func。那么,如何捕获回调中可能发生的错误呢?请提供帮助。您不能将抛出带有回调的异步代码内部。您必须使用异步错误处理:
function makeQuery(callback) {
myDB.query(SQL, object, (err, res) => {
if (err) {
callback(err)
return
}
...
}
}
由调用方提供一个合适的回调函数,该函数接受(err,response)
或类似的内容。调用者还负责拦截、处理或转发任何和所有错误
如果使用承诺驱动的代码,则可以使用.catch()
或异步
函数和等待
函数,这些函数将在try
中工作。是一个很好的Promise驱动的数据库驱动程序
然后您的代码如下所示:
let result = await myDB.query(SQL, object)
这显然要干净得多。您不能在带有回调的异步代码中抛出。您必须使用异步错误处理:
function makeQuery(callback) {
myDB.query(SQL, object, (err, res) => {
if (err) {
callback(err)
return
}
...
}
}
由调用方提供一个合适的回调函数,该函数接受(err,response)
或类似的内容。调用者还负责拦截、处理或转发任何和所有错误
如果使用承诺驱动的代码,则可以使用.catch()
或异步
函数和等待
函数,这些函数将在try
中工作。是一个很好的Promise驱动的数据库驱动程序
然后您的代码如下所示:
let result = await myDB.query(SQL, object)
这显然要干净得多。您可以使用以下示例:
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' doesn't exist
编辑:
@tadman所说的是正确的,如果您使用if(err)throw err
,您只会生成一个异常错误,并且您会丢失所需的内容。您可以使用以下示例:
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' doesn't exist
编辑:
@tadman所说的是正确的,如果您使用if(err)throw err
,您只会生成一个异常错误,您将丢失所需的内容。谢谢!这对我帮助很大!谢谢这对我帮助很大!