Maison > base de données > tutoriel mysql > À propos de la façon dont NodeJs utilise le module Mysql pour implémenter des exemples de traitement des transactions

À propos de la façon dont NodeJs utilise le module Mysql pour implémenter des exemples de traitement des transactions

黄舟
Libérer: 2017-06-04 10:02:28
original
1980 Les gens l'ont consulté

Cet article présente principalement NodeJs utilisant le module Mysql pour implémenter le traitement des transactions. L'éditeur pense que c'est plutôt bien. Maintenant, je vais le partager avec. vous et donnez également. Utilisons-le tous comme référence. Suivons l'éditeur et jetons un œil

Modules dépendants :

mysql

npm install mysql --save
Copier après la connexion

2.

(ps : le module async peut être remplacé par
npm install async --save
Copier après la connexion
d'autres

Modules Promise tels que bluebird, q, etc.) Parce que le module mysql de

Node.js

encapsule lui-même les transactions C'est trop simple, et l'utiliser directement provoquera un sérieux enfer de rappel, nous avons donc encapsulé deux méthodes, une pour initialiser sql et params, et une pour exécuter des transactions. Initialisez SQL et les paramètres :

Si vous souhaitez exécuter plusieurs instructions SQL, vous avez besoin de :
function _getNewSqlParamEntity(sql, params, callback) {
  if (callback) {
    return callback(null, {
      sql: sql,
      params: params
    });
  }
  return {
    sql: sql,
    params: params
  };
}
Copier après la connexion

Ensuite, je le mets dans mon propre dbHelper. js La fonction
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
Copier après la connexion

de execTrans y est encapsulée, qui est utilisée pour exécuter des transactions

De cette manière, la transaction peut être exécutée :
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);
            }
          })
        }
      })
    });
  });
}
Copier après la connexion

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal