依赖模块:

1. mysql:https://github.com/felixge/node-mysql
npm install mysql --save
2. async:https://github.com/caolan/async
npm install async --save
(ps: async模块可换成其它Promise模块如bluebird、q等)
因为Node.js的mysql模块本身对于事务的封装过于简单,而且直接使用会有很严重callback hell,故我们封装了两个方法,一个用来初始化sql & params,一个用来执行事务。
初始化sql & params:
function _getNewSqlParamEntity(sql, params, callback) {
if (callback) {
return callback(null, {
sql: sql,
params: params
});
}
return {
sql: sql,
params: params
};
}
如果你要执行多条sql语句,则需要:
var sqlParamsEntity = [];
var sql1 = "insert table set a=?, b=? where 1=1";
var param1 = {a:1, b:2};
sqlParamsEntity.push(_getNewSqlParamEntity(sql1, param1));
var sql2 = "update ...";
sqlParamsEntity.push(_getNewSqlParamEntity(sql1, []));
//...更多要事务执行的sql
然后我在我自己的dbHelper.js里封装了execTrans的函数,用来执行事务
var mysql = require('mysql');
var async = require("async");
module.exports = {
execTrans: execTrans,
}
var pool = mysql.createPool({
host: "mysql host",
user: "mysql login user",
password: "mysql login pwd",
database: "target db name",
connectionLimit: 10,
port: "mysql db port",
waitForConnections: false
});
function execTrans(sqlparamsEntities, callback) {
pool.getConnection(function (err, connection) {
if (err) {
return callback(err, null);
}
connection.beginTransaction(function (err) {
if (err) {
return callback(err, null);
}
console.log("开始执行transaction,共执行" + sqlparamsEntities.length + "条数据");
var funcAry = [];
sqlparamsEntities.forEach(function (sql_param) {
var temp = function (cb) {
var sql = sql_param.sql;
var param = sql_param.params;
connection.query(sql, param, function (tErr, rows, fields) {
if (tErr) {
connection.rollback(function () {
console.log("事务失败," + sql_param + ",ERROR:" + tErr);
throw tErr;
});
} else {
return cb(null, 'ok');
}
})
};
funcAry.push(temp);
});
async.series(funcAry, function (err, result) {
console.log("transaction error: " + err);
if (err) {
connection.rollback(function (err) {
console.log("transaction error: " + err);
connection.release();
return callback(err, null);
});
} else {
connection.commit(function (err, info) {
console.log("transaction info: " + JSON.stringify(info));
if (err) {
console.log("执行事务失败," + err);
connection.rollback(function (err) {
console.log("transaction error: " + err);
connection.release();
return callback(err, null);
});
} else {
connection.release();
return callback(null, info);
}
})
}
})
});
});
}
这样就可以执行事务了:
execTrans(sqlParamsEntity, function(err, info){
if(err){
console.error("事务执行失败");
}else{
console.log("done.");
}
})
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# nodejs
# mysql
# 事务
# mysql事务处理
# node使用mysql获取数据库数据中文乱码问题的解决
# node+express框架中连接使用mysql(经验总结)
# Node.js使用MySQL连接池的方法实例
# Node.JS使用Sequelize操作MySQL的示例代码
# 解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3
# 初步使用Node连接Mysql数据库
# MySQL数据库node使用详解
# 装了
# 自己的
# 会有
# 我在
# 你要
# 多条
# 大家多多
# 就可以
# 则需
# null
# var
# strong
# params
# amp
# function
# return
# _getNewSqlParamEntity
# sqlParamsEntity
# push
# callback
相关文章:
临沂网站制作公司有哪些,临沂第四中学官网?
临沂网站制作企业,临沂第三中学官方网站?
建站之星后台密码遗忘?如何快速找回?
定制建站价位费用解析与套餐推荐全攻略
简历在线制作网站免费,免费下载个人简历的网站是哪些?
制作销售网站教学视频,销售网站有哪些?
如何通过wdcp面板快速创建网站?
Swift中swift中的switch 语句
北京的网站制作公司有哪些,哪个视频网站最好?
如何高效完成独享虚拟主机建站?
教学网站制作软件,学习*后期制作的网站有哪些?
制作门户网站的参考文献在哪,小说网站怎么建立?
c# await 一个已经完成的Task会发生什么
网站制作服务平台,有什么网站可以发布本地服务信息?
如何快速完成中国万网建站详细流程?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
如何快速搭建高效可靠的建站解决方案?
XML的“混合内容”是什么 怎么用DTD或XSD定义
一键网站制作软件,义乌购一件代发流程?
建站主机SSH密钥生成步骤及常见问题解答?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
Android滚轮选择时间控件使用详解
建站之星代理平台如何选择最佳方案?
常州企业建站如何选择最佳模板?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
浅谈Javascript中的Label语句
TestNG的testng.xml配置文件怎么写
如何快速上传建站程序避免常见错误?
h5网站制作工具有哪些,h5页面制作工具有哪些?
建站主机解析:虚拟主机配置与服务器选择指南
建站之星如何助力企业快速打造五合一网站?
,怎么用自己头像做动态表情包?
*服务器网站为何频现安全漏洞?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
高端网站建设与定制开发一站式解决方案 中企动力
建站主机选购指南:核心配置优化与品牌推荐方案
如何在IIS7中新建站点?详细步骤解析
建站主机选择指南:服务器配置与SEO优化实战技巧
建站主机助手选型指南:2025年热门推荐与高效部署技巧
建站ABC备案流程中有哪些关键注意事项?
定制建站策划方案_专业建站与网站建设方案一站式指南
如何挑选高效建站主机与优质域名?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
网站app免费制作软件,能免费看各大网站视频的手机app?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
建站之家VIP精选网站模板与SEO优化教程整合指南
如何通过商城自助建站源码实现零基础高效建站?
*请认真填写需求信息,我们会在24小时内与您取得联系。