Node Mysql事务处理封装
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,node回调函数的方式使得数据库事务貌似并没有像java、php那样编写简单,网上找了一些事务处理的封装并没有达到自己预期的那样简单编写,还是自己封装一个吧。封装的大体思路很简单:函数接受一个事务处理
千家信息网最后更新 2025年02月01日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安全错误
数据库的锁怎样保障安全
怎么看数据库多少个表
杭州建设智慧小区软件开发
快快的服务器
百家乐分析软件开发
项目售前网络安全方案
浪潮存储管理服务器
棒的cc防护服务器
服务完善的数据库分布式部署
数据库ora12033
阿里网盘挂载到服务器
魔兽数据库 橙斧
个人台式机怎么做游戏服务器
现在学软件开发好就业吗
我国儿童网络安全保护
华为服务器管理地址在哪
代理服务器不能用
河南软件开发排行榜
地图结合数据库
服务器p3故障
质量大数据库建设
苍溪县公共信用信息数据库目录
服务器机柜市场发展预测研究报告
监督网络安全的部门
对网络安全教育的意义
凤翼互联网科技
腾讯云服务器安装需要什么条件
软件开发违法处置
电脑网络技术有哪些专业
服务器机箱带不带风扇
数据库设计箭头什么意思