首先,我对 Node.js 相当陌生,它处理错误的方式对我来说仍然感觉很陌生。我真的很难理解它。
我正在尝试使用express 在node.js 中编写一个简单的程序,该程序通过网络接收mySQL 查询,执行它们并返回结果。该部分已经可以正常工作,但是如果客户端发送导致 mySQL 错误的查询,程序就会崩溃。有问题的代码块如下,在正常(如非异步)函数内部:
try {
connection.query(queryFromClient, function (error, result, field) {
if (error) {throw error} else {
response.send(result[0]);
response.status(200);
};
})
} catch (error) {
response.send("Query error");
response.status(422);
console.log("Query error from client");
}
});
如您所见,如果出现问题,查询 should 会抛出错误,并且该错误包含在“try”语句中。格式正确的查询可以正常工作,但格式错误的查询会导致程序在 connection.query 行上崩溃,尽管进行了错误处理。例如,如果我运行
SELECT column FROM badtable
,其中数据库中不存在 badtable,我在客户端没有得到任何响应,并且在 node.js 日志中出现以下错误:
throw err; // Rethrow non-MySQL errors
^
Error: ER_NO_SUCH_TABLE: Table 'mydb.badtable' doesn't exist
(err, req, res, next) => {
return res.status(err.statusCode).json({message: err.msg})
}
if(error){
next(error)
return
}