使用“参数不正确”查询MySQL数据库以引发错误时,NodeJS服务器崩溃

时间:2018-11-10 15:24:00

标签: mysql node.js server crash

在尝试查询本地MySQL数据库时,遇到以下错误:

..\server\node_modules\mysql\lib\protocol\Parser.js:80
        throw err; // Rethrow non-MySQL errors
        ^
Incorrect arguments

此后未提供更多信息。 我查找了已经可用的解决方案,例如添加:

con.on('error', function(err) {
  console.log("[mysql error]",err);
});

,甚至用throw err替换(唯一的)代码中的console.log(err);,但没有花招。

一旦显示错误,服务器最终将崩溃,并且发生在以下代码中的console.log('Query res: ', results);之后,这意味着请求已成功完成并已获取了所需数据。

如我所见,这可能是由 bcrypt 引起的,但错误来自日志中所见的 MySQL node.js 包。

loginroutes.js:

exports.login = function(req, res) {
    console.log("email:", req.body.email, "password:", req.body.password);
    var email = req.body.email;
    var password = req.body.password;

    con.query("SELECT * FROM users WHERE email = ?", [email], (err, results) => {
        if (err) {
            console.log("Error ocurred");
            res.send({"code":400, "failed":"error occurred"});
        } else {
            console.log('Query res: ', results);
            if (results.length > 0) {
                if (bcrypt.compareSync(results.password, password))
                    res.send({"code":200, "success":"login successful"});
                else
                    res.send({"code":204, "success":"email & password combination does not match"});
            } else
                res.send({"code":204, "success":"email does not exist"});
        }
    });
};

我错过了什么,该怎么解决?

谢谢。

编辑:仅出于此目的,还尝试了SELECT * FROM users WHERE email = \"" + email + "\"",结果与先前的请求类似。

1 个答案:

答案 0 :(得分:0)

要在代码中记录任何异常,需要将代码块放入try catch

try {
  // your code here
} catch (error) {
  console.log(error);
  res.send({ code:400, failed: "error occurred"});
}

请尝试以下代码,然后在此处粘贴错误。