通过 NodeJS + MySQL 登录时捕获异常错误
Catching exception errors when logging in via NodeJS + MySQL
最近一直在尝试学习NodeJS来设置登录流程,所以我决定把所有的错误都写出来,并为它们做例外处理。我的问题是如何确保每个 if 都对每个错误代码负责。我以前没有使用过 try and catch,所以这对我来说是一个新领域。
使用多个 try-catch 更好还是我应该考虑使用 1 个块,例如我可以在其中使用开关(如果在这里作为一个快速示例,则使用 else)。
Table with Status errors
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
中的导出函数不会 return 任何东西,因为您调用的数据库查询是一个异步 I/O 进程并且需要另一个回调函数获取数据库 return 编辑的数据
这永远不会像预期的那样工作:
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
}
您可以使用更优雅的方式代替 switch :
const data = { Status: 1, Data: results }
if(error) {
switch(error.code) {
case 'ER_ACCESS_DENIED_ERROR' :
data.Satus = 2;
return data;
...
}
}
return data;
最近一直在尝试学习NodeJS来设置登录流程,所以我决定把所有的错误都写出来,并为它们做例外处理。我的问题是如何确保每个 if 都对每个错误代码负责。我以前没有使用过 try and catch,所以这对我来说是一个新领域。 使用多个 try-catch 更好还是我应该考虑使用 1 个块,例如我可以在其中使用开关(如果在这里作为一个快速示例,则使用 else)。
Table with Status errors
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
中的导出函数不会 return 任何东西,因为您调用的数据库查询是一个异步 I/O 进程并且需要另一个回调函数获取数据库 return 编辑的数据
这永远不会像预期的那样工作:
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
}
您可以使用更优雅的方式代替 switch :
const data = { Status: 1, Data: results }
if(error) {
switch(error.code) {
case 'ER_ACCESS_DENIED_ERROR' :
data.Satus = 2;
return data;
...
}
}
return data;