六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

對于NodeJs如何使用Mysql模塊完成事務處理案例

[摘要]本篇文章主要介紹了NodeJs使用Mysql模塊實現事務處理 ,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧依賴模塊:1. mysqlnpm install mysql --save2. asyncnpm install async --save(ps: async模...
本篇文章主要介紹了NodeJs使用Mysql模塊實現事務處理 ,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

依賴模塊:

1. mysql

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 {
          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模塊實現事務處理實例的詳細內容,更多請關注php中文網其它相關文章!


學習教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 青青福利视频 | 天天综合天天看夜夜添狠狠玩 | 日本一区二区三区四区 | 日日日天天射天天干视频 | 三级特黄高清完整视频 | 婷婷色爱区综合五月激情韩国 | 欧美在线综合视频 | 日韩黄色影视 | 亚洲第一网站免费视频 | 色花堂在线| 日本片网址| 青草青青在线 | 日韩专区中文字幕 | 亚洲成a人v天堂网 | 午夜美女网站 | 色婷婷综合激情 | 婷婷在线视频 | 亚洲精品国产综合久久一线 | 天天操天天射天天插 | 色一情一乱一伦一视频免费看 | 午夜免费影视 | 日本高清观看视频 | 亚洲男人的天堂在线视频 | 一级做a爰片性色毛片视频图片 | 午夜亚洲国产成人不卡在线 | 亚洲精品福利 | 青青草综合在线 | 七七久久综合 | 伊人网免费视频 | 日韩手机专区 | 亚洲欧美日韩高清一区二区三区 | 天天做天天爱夜夜爽 | 又粗又大又爽又紧免费视频 | 天天爱天天做色综合 | 四虎www成人影院 | 日本韩国三级在线观看 | 日韩第六页 | 日本特黄特色aa大片免费 | 欧美限制级在线 | 天天色综合图片 | 啪啪欧美 |