Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 即使发生错误,如何使NodeJ继续工作?_Javascript_Node.js_Rest_Mariadb - Fatal编程技术网

Javascript 即使发生错误,如何使NodeJ继续工作?

Javascript 即使发生错误,如何使NodeJ继续工作?,javascript,node.js,rest,mariadb,Javascript,Node.js,Rest,Mariadb,我正在构建一个简单的登录/注册应用程序。我正在测试登录部分。然而,每当我输入错误的登录名时,后端(用NodeJS和Express编写)就会崩溃并停止 以前,每当SQL返回如下错误时,我的代码就会抛出一个错误: con.query(“从表_name中选择*,其中username=“+usernameGiven,函数(er,结果){ if(er)投掷器; 返回结果; } 这是可行的,但如上所述存在问题。因此我删除了抛出器部分,并将其替换为console.log(er),但nodeJS仍将停止,进

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

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

con.query(“从表_name中选择*,其中username=“+usernameGiven,函数(er,结果){
if(er)投掷器;
返回结果;
} 
这是可行的,但如上所述存在问题。因此我删除了
抛出器
部分,并将其替换为
console.log(er)
,但nodeJS仍将停止,进一步的登录尝试将抛出
CORS
错误

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

编辑: 我尝试了
try
catch
,如下所示:

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)
/home/x/CodeOver/LoginForm/api/node\u modules/mysql/lib/protocol/Parser.js:437
抛出错误;//重新抛出非MySQL错误
^
TypeError:无法读取未定义的属性“password”
在查询时。(/home/x/CodeOver/LoginForm/api/api.js:43:37)
在查询时。(/home/x/CodeOver/LoginForm/api/node\u modules/mysql/lib/Connection.js:526:10)

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

在这种情况下,try..catch块实际上不会捕获查询错误,不过如果出现任何其他错误,我会将它们保留在那里

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

如果我们的用户名不存在,我也会提前失败并抛出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);
}

试着抓住它,然后继续我试过了,但它仍然显示了一个错误,我已经用错误日志的一部分编辑了这个问题。