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(‘事务提交失败’)})
上述案例是我截取项目的一段代码,从上面代码显然可以很容易封装自己的逻辑,可以执行不同路径的事务流程。
转载于:https://blog.51cto.com/janwool/2094623
Node Mysql事务处理封装相关推荐
- node mysql 模块 封装_node.js基于工厂方法的mysql模块封装
有空写完再补说明,手上的事情比较多,以后边做边完善接口. app.js var config = require('./config'); function Query(strquery,option ...
- mysql 事物封装_mysqls 一个node对mysql的封装库 链式调用、支持事务
在我自己的平常开发中很少有见到javascript对sql的封装比较好的库(找了一圈也没找到.应该是暂时我没发现),因此前期的项目中根据自己的项目情况实现了一套封装方法. 最近我准备写一个这样的库,基 ...
- mysql事务处理用法与实例详解
MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID事务.行级锁.并发 3.Berkeley DB: ...
- mysql事务处理 begin_mysql 事务处理
mysql 事务处理(表的引擎必须是 innodb / BDB) 主要是两种两法:推荐用第一种 1.用 begin,rollback,commit 来实现 begin 开始一个事务 rollback ...
- node与mysql开源_node与mysql的相互使用————node+mysql
node与mysql的相互使用----node+mysql 为什么选node???因为我是个前端. 为什么选mysql???因为成熟,稳定,听说容易学. 一.mysql数据库: mysql下载和使用我 ...
- node+Mysql,数据库时区显示正确,查询时却显示另一个时区
问题: 1.node+Mysql,查看数据库时区显示正确,但查询时,显示的确是另一个时区的时间. 2.前端调用接口返回:startTime: "2020-03-04T17:53:55.000 ...
- MySQL事务处理与事务隔离(锁机制)
转载:http://blog.csdn.net/qq_26525215/article/details/52146529 MySQL 事务处理 简单介绍事务处理: MySQL 事务主要用于处理操作量大 ...
- mysql pdo 事务处理_php中pdo的mysql事务处理实例
php+mysql事务处理的几个步骤: 1.关闭自动提交 2.开启事务处理 3.有异常就自动抛出异常提示再回滚 4.开启自动提交 注意: mysql只有这个InnoDB驱动是支持事务处理的,默认MyI ...
- python mysql操作封装库_python封装mysq操作,进行数据库的增删改
python操作mysql进行封装,封装的好处我就不提了,以下是我做项目时的一个封装,大家可以根据实际需要进行自己的一个封装 我封装的内容: 1.数据库的配置文件 2.获取数据配置文件的地址 3.连接 ...
最新文章
- Qt学习笔记,Qt程序架构设计要旨
- iOS UIVisualEffectView毛玻璃亮度不符合要求
- 如何自定义IHttpHandler
- Spring3向Spring4升级过程中quartz修改
- S3C6410启动模式介绍
- Java学习笔记004——接口、克隆、回调、内部类
- 计算机系统结构安全检测,信息安全体系结构安全测评实验报告.doc
- CentOS查看硬件信息
- ogre 1.9SDK阅读笔记
- sqlloader 直接路径和常规路径_sqlloader
- enfp工具箱怎么用_小丸工具箱使用技巧详细图解,值得各位学习
- English 900 英语九百句
- oracle按顺序新增字段,Oracle 修改字段顺序的两种方法
- msl3等级烘烤时间_MSL 湿敏等级对应表
- IO端口和IO内存映射【waitting】
- 【Python学习】(9)[Errno 2]No such file or directory:'calibri.ttf'
- 激光 pm2.5传感器 攀藤科技 stm32 调试通过
- vue-router 是什么?它有哪些组件
- 任天堂服务器维护12月1,任天堂明星大乱斗12月14日更新公告 1.2.0更新补丁说明...
- android手机小内存,世界最小Android手机问世 仅2.4英寸512MB内存