提问者:小点点

如何使NodeJS在发生错误的情况下继续运行?


我正在建立一个简单的登录/注册应用程序。 我正在测试登录部分。 但是,每当我输入错误的登录时,后端(用nodejsexpress编写)就会崩溃并停止。

以前,每当SQL返回错误时,我的代码就会抛出一个错误,如下所示:

con.query("SELECT * FROM table_name WHERE username=" + usernameGiven, function(er, result) {
    if (er) throw er;
    return result;
} 

这起作用了,但也有上面所说的问题。 因此,我删除了throw er部分,并将其替换为console.log(er),但nodeJS仍然会停止,并且进一步的登录尝试将抛出cors错误。

那么,我怎样才能阻止它做,让它只是记录它,然后继续下一个请求呢?

我尝试了trycatch,如下所示:

try {
        con.query(sql_query, function(er, result) {
            if (er) {
                console.log(er);
            }
            response.json(result);
        })
    } catch (er) {
        console.log(er);
    }

但是,这仍然显示一个错误:

/home/x/CodeOver/LoginForm/api/node_modules/mysql/lib/protocol/Parser.js:437
      throw err; // Rethrow non-MySQL errors
      ^

TypeError: Cannot read property 'password' of undefined
    at Query.<anonymous> (/home/x/CodeOver/LoginForm/api/api.js:43:37)
    at Query.<anonymous> (/home/x/CodeOver/LoginForm/api/node_modules/mysql/lib/Connection.js:526:10)

共1个答案

匿名用户

我建议进行一点重构,使代码对这种类型的故障更加健壮。

尝试。。 在这种情况下,catch块实际上不会捕获查询错误,但我会将它们留在那里以防出现任何其他错误。

我们在查询时也应该在这里使用参数。 SQL注入攻击是个坏消息,使用参数还会使查询不太可能导致语法错误。

如果UsernameGived不存在,我也会提前失败并抛出400错误。

这里是更新的代码,希望对你有所帮助!

try {
    if (!usernameGiven) {
        response.status(400).send("Bad Request");
        return;
    }
    let sql_query = "select * from table_name where username = ?";
    con.query(sql_query, [usernameGiven], function(er, result) {
        if (er) {
            console.error("Error occurred:", er);
            response.status(500).send("Internal Server Error")
        } else {
            response.json(result);
        }
    })
} catch (er) {
    console.error("Error occurred:", er);
}