Try/Catch 在 Node.js MySQL 查询中是冗余的吗?
Is a Try/Catch Redundant in a Node.js MySQL Query?
我正在设置一个系统,该系统将查询 MySQL 数据库以注册和删除员工等。我只是想知道是否需要在 try catch 块中进行查询,或者它是否只是多余的。我在下面有一个例子。我的理解是,这会引发错误,但不会像 try/catch 那样使系统崩溃,捕获错误并让服务器保持功能。
var con = mysql.createConnection({
host: 'mysql1',
user: 'root',
database: 'assignment',
password: 'admin'
});
let sqlQuery = `INSERT INTO CBOdb (staffName, staffID, staffPassword, time) VALUES ('${staffName}', '${staffID}', '${staffPassword}', NOW())`;
try {
con.query(sqlQuery, function(err, result) {
if (err) {
throw err;
} else {
res.send(0)
}
})
} catch {
res.send(1) //"**Error ecounterd, staff not registerd**\nPlease contact system Administrator.")
}
Is a Try/Catch Redundant in this Node.js MySQL Query?
是的,没有必要。来自查询的错误不会通过您可以使用 try/catch
捕获的同步异常传回。它们通过回调的 err
参数传回。
正如评论中提到的,nodejs 的 mysql 模块有几个不同的版本。您正在使用基于普通回调的原始版本。还有另一个名为 mysql2 的模块版本支持 promises,这为您提供了一些更现代的调用 mysql 和使用 promises await
和 try/catch
处理错误的方式。
下面是使用 await
并使用 mysql2/promise 接口捕获 try/catch 错误的示例。
const mysql = require('mysql2/promise');
app.get("/somePath", async (req, res) => {
// this needs to be inside an async function so you can use await
const con = await mysql.createConnection({ ... });
let sqlQuery = `INSERT INTO CBOdb (staffName, staffID, staffPassword, time) VALUES ('${staffName}', '${staffID}', '${staffPassword}', NOW())`;
try {
const result = await con.query(sqlQuery);
res.send(0)
} catch(e) {
console.log(e);
res.send(1); //"**Error ecounterd, staff not registerd**\nPlease contact system Administrator.")
}
});
我正在设置一个系统,该系统将查询 MySQL 数据库以注册和删除员工等。我只是想知道是否需要在 try catch 块中进行查询,或者它是否只是多余的。我在下面有一个例子。我的理解是,这会引发错误,但不会像 try/catch 那样使系统崩溃,捕获错误并让服务器保持功能。
var con = mysql.createConnection({
host: 'mysql1',
user: 'root',
database: 'assignment',
password: 'admin'
});
let sqlQuery = `INSERT INTO CBOdb (staffName, staffID, staffPassword, time) VALUES ('${staffName}', '${staffID}', '${staffPassword}', NOW())`;
try {
con.query(sqlQuery, function(err, result) {
if (err) {
throw err;
} else {
res.send(0)
}
})
} catch {
res.send(1) //"**Error ecounterd, staff not registerd**\nPlease contact system Administrator.")
}
Is a Try/Catch Redundant in this Node.js MySQL Query?
是的,没有必要。来自查询的错误不会通过您可以使用 try/catch
捕获的同步异常传回。它们通过回调的 err
参数传回。
正如评论中提到的,nodejs 的 mysql 模块有几个不同的版本。您正在使用基于普通回调的原始版本。还有另一个名为 mysql2 的模块版本支持 promises,这为您提供了一些更现代的调用 mysql 和使用 promises await
和 try/catch
处理错误的方式。
下面是使用 await
并使用 mysql2/promise 接口捕获 try/catch 错误的示例。
const mysql = require('mysql2/promise');
app.get("/somePath", async (req, res) => {
// this needs to be inside an async function so you can use await
const con = await mysql.createConnection({ ... });
let sqlQuery = `INSERT INTO CBOdb (staffName, staffID, staffPassword, time) VALUES ('${staffName}', '${staffID}', '${staffPassword}', NOW())`;
try {
const result = await con.query(sqlQuery);
res.send(0)
} catch(e) {
console.log(e);
res.send(1); //"**Error ecounterd, staff not registerd**\nPlease contact system Administrator.")
}
});