首页 > 解决方案 > 使用“不正确的参数”查询 MySQL 数据库以引发错误时,NodeJS 服务器崩溃

问题描述

在尝试查询本地 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包。

登录路由.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 + "\""也只是为了它而尝试过,结果类似于之前的请求。

标签: mysqlnode.jsservercrash

解决方案


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

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

请尝试此代码并在此处粘贴错误。


推荐阅读