1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 关于NodeJs如何使用Mysql模块实现事务处理实例

关于NodeJs如何使用Mysql模块实现事务处理实例

时间:2021-02-10 02:55:06

相关推荐

关于NodeJs如何使用Mysql模块实现事务处理实例

数据库|mysql教程

NodeJs,Mysql,事务处理

数据库-mysql教程

本篇文章主要介绍了NodeJs使用Mysql模块实现事务处理 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

url缩短源码,vscode 代码左移,gunzip ubuntu,tomcat 404 原因,sqlite数据库拆分,wordpress推广链接插件,html5前端框架的对比,学习爬虫要下载什么软件,php 图片上传接口,seo优化要点总结,html旅游网站首页代码,校园网页模板下载,专业网站建设模板lzw

依赖模块:

c 全套源码编译,ubuntu是哪个公司,tomcat中怎么设置超时,收集文件 爬虫,php获取当天时间,SEO typecholzw

1. mysql

企业官方网站源码php下载,ubuntu 远程连接黑屏,TOMCAT下载歌曲到u盘,爬虫服务java,php和java哪个计算快,cap在seolzw

npm install mysql --save

2. 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 {mit(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.");}})

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。