Node Mysql事务处理封装
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,node回调函数的方式使得数据库事务貌似并没有像java、php那样编写简单,网上找了一些事务处理的封装并没有达到自己预期的那样简单编写,还是自己封装一个吧。封装的大体思路很简单:函数接受一个事务处理
千家信息网最后更新 2025年11月07日Node Mysql事务处理封装
node回调函数的方式使得数据库事务貌似并没有像java、php那样编写简单,网上找了一些事务处理的封装并没有达到自己预期的那样简单编写,还是自己封装一个吧。
封装的大体思路很简单:函数接受一个事务处理的函数,如何处理事务的逻辑由该函数确定,而不是像网上封装的事务是对组装多条预处理SQL和参数。该事务处理函数要求返回Promise。这样我们就可以通过该Promise来确定是提交事务还是回滚事务了。
根据上述思路,实现代码:
let mysql = require('mysql')let config = require('../config')let pool = mysql.createPool(config.database) //config.databa数据库配置let trans = (tran) => { return new Promise((resolve, reject) => { //返回promise提供事务成功与失败的接口 pool.getConnection((err, conn) => { if(err) { reject(err) }else { conn.beginTransaction((err) => { //开始事务处理 if(err) { conn.release() reject(err) }else { let promise = tran(conn) //调用事务处理函数 promise.then(result => { conn.commit(err => { //事务处理函数resolve则提交事务 if(err) { reject(err) }else { resolve(result) } }) }).catch(err => { conn.rollback(() => { //事务处理函数reject则回滚事务 conn.release() reject(err) }) }) } }) } }) })}事务处理函数接受数据库连接对象conn,这里我封装了数据库执行语句:
trans.query = (conn, sql, params) => { return new Promise((resolve, reject) => { conn.query(sql, params,(err, result) => { if(err) { reject(err) }else { resolve(result) } }) })}上面事务处理封装完成,应用就和正常Promise使用相同:
trans((conn) => { return trans.query(conn, db_user.register.user, [username, password, new Date().getTime()]) .then(result => { return trans.query(conn,db_user.login, [username]) }).then(result => { return trans.query(conn,db_user.register.profile,[result[0].id, nickname]) }) }).then(result=>{ console.log('事务提交成功') }).catch(err => { console.log('事务提交失败') })上述案例是我截取项目的一段代码,从上面代码显然可以很容易封装自己的逻辑,可以执行不同路径的事务流程。
事务
处理
函数
封装
数据
数据库
代码
成功
思路
还是
逻辑
不同
相同
参数
可以通过
多条
对象
接口
方式
案例
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库没有外键怎么查询
网络安全法惩处案例
贵广网络安全海报
陕西项目软件开发服务商
比卡漫画服务器
此服务器在美国维护
电信高防服务器
网络安全公益讲座临汾教育台
网络安全编程pdf
公司网络安全的文章
网络安全可以叫什么
英国癌症数据库
金融IT软件开发工程师
软件开发技术基础 百度云
计算机网络技术模拟试题
广东大数据软件开发费用是多少
python读数据库中汉字
如何参与政府网络安全
数据库安装错误
机关单位网络安全工作管理方案
电脑如何找到注册服务器文件
继续教育网络安全法
网络安全法第五章责任
图片存到异地服务器
数据库企业人事管理系统
网络安全宣传周学校活动策划
无法连接到redis服务器
科技互联网时代下载
关于软件开发的知识
网络安全观后感学生