一种优雅的用于Node.js的MySQL包的异步事务函数封装方式
const mysql = require('mysql');
// 创建数据库连接
const connection = mysql.createConnection({
host: 'localhost',
user: 'your_username',
password: 'your_password',
database: 'your_database'
});
// 连接数据库
connection.connect();
// 封装事务处理函数
function handleTransaction(transCallback) {
// 开始事务
connection.beginTransaction((err) => {
if (err) {
return transCallback(err);
}
transCallback(null, connection, (error, commit = true) => {
if (error) {
connection.rollback(function() {
throw error;
});
} else if (commit) {
connection.commit(function(commitErr) {
if (commitErr) {
throw commitErr;
}
});
}
});
});
}
// 使用事务处理函数
handleTransaction((connection, done) => {
// 执行一些数据库操作
connection.query('DELETE FROM your_table WHERE id = 1', (err, results) => {
if (err) {
// 如果操作失败,不提交事务
done(err, false);
} else {
// 如果操作成功,提交事务
done(null, true);
}
});
});
// 关闭数据库连接
connection.end();
这个示例代码展示了如何封装一个用于处理MySQL事务的函数handleTransaction
,它接受一个回调函数transCallback
作为参数,该回调中执行具体的数据库操作。操作完成后,通过调用传入的done
回调来控制事务是提交还是回滚。这种方式使得数据库事务的管理更加集中和优雅。
评论已关闭