[英]Catching exception errors when logging in via NodeJS + MySQL
最近我一直在尝试学习NodeJS来设置登录过程,所以我决定编写所有错误并为它们制作例外。 我的问题是如何确保每个错误代码是否负责。 我以前没有使用过try和catch,所以这对我来说是一个新的领域。 使用多个try-catch也是更好的,或者我应该考虑使用1个块,我可以使用一个开关(例如,如果在这里作为一个简单的例子使用)。
表有状态错误
0 - 没有与数据库的连接。
1 - 连接正常,但我们没有任何权限访问数据库或类似的东西。
2 - 一切都好。
3 - 确定,但在查询结果中找不到数据。
4 - 获取查询结果时出错。
5 - 其他。
module.exports = (username,password,connection ) => {
var data ={
"Status" : null,
"Data" : {} //JSON results inside of Data Json
}
try{
connection.query("SELECT id FROM players", function (error, results, fields) {
if (error){
data.Status = 0;
data.Data= "No connection can be established with the database";
return data
}
else if(error){
data.Status = 1;
data.Data= results + "Connection OK but no priviliges";
return data
}
else if(error){
data.Status = 2;
data.Data=results + "connection running";
return data
}
else if(error){
data.Status = 3;
data.Data=results + "No data found in query results";
return data
}
else if(error){
data.Status = 4;
data.Data=results;
return data
}
else if(error){
data.Status = 5;
data.Data=results;
return data
}
});
}
catch(e){
console.log(e);
data.Status= 2;
data.Data=null;
return data;
}
};
欢迎使用异步编程,您的try / catch块不会对任何I / O进程执行任何操作,所有错误都由回调函数中的error
对象处理。 (除非你使用最后的async / await ES6模式)
connection.query("SELECT id FROM players", function (error, results, fields) {
if (!error) { // no error, return results
data.status = 2;
data.Data = results;
return data;
}
// for all error code, please check mysql library document
// https://www.npmjs.com/package/mysql#error-handling
if (error.code === 'ER_ACCESS_DENIED_ERROR') {
data.Status = 1;
data.Data=results;
return data
}
// handle any other error codes
// if ....
});
编辑:请注意,您在module.exports
导出的函数不会返回任何内容,因为您正在调用数据库查询,这是一个异步I / O进程,需要另一个回调函数来获取数据库返回的数据
这将永远不会按预期工作:
if (error){
console.log("I'm the error");
return;
} else if(error){
console.log("I will never be display on error because of return in the first if");
}
应该 :
if (!error){
// No error
} else if(error === 'something'){
// Error something
} else if ....
// Other type of error
} else {
// Unknown error
}
您可以以更优雅的方式使用开关:
const data = { Status: 1, Data: results }
if(error) {
switch(error.code) {
case 'ER_ACCESS_DENIED_ERROR' :
data.Satus = 2;
return data;
...
}
}
return data;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.