对 Node.js mysql 错误处理感到困惑

问题描述 投票:0回答:1

首先,我对 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
mysql node.js try-catch throw
1个回答
0
投票

您可以创建一个误差函数:

(err, req, res, next) => {
   return res.status(err.statusCode).json({message: err.msg})
 }

不要抛出错误,而是将其传递给“下一个”函数

if(error){
    next(error)
    return
}
© www.soinside.com 2019 - 2024. All rights reserved.