gpt4 book ai didi

javascript - Node.js MySQL 查询中的 Try/Catch 是冗余的吗?

转载 作者:行者123 更新时间:2023-12-05 03:34:53 24 4
gpt4 key购买 nike

我正在设置一个系统,该系统将查询 MySQL 数据库以注册和删除员工等。我只是想知道是否需要在 try catch block 中进行查询,或者它是否只是多余的。我在下面有一个例子。我的理解是,这会引发错误,但不会像 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支持 promise ,这为您提供了一些更现代的方式来调用 mysql 并使用 promise 、awaittry/catch 处理错误。

这是一个使用 await 并使用 mysql2/promise 接口(interface)通过 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.")
}

});

关于javascript - Node.js MySQL 查询中的 Try/Catch 是冗余的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70048169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com