Maison > Article > base de données > À propos de la façon dont NodeJs utilise le module Mysql pour implémenter des exemples de traitement des transactions
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
2.
(ps : le module async peut être remplacé parnpm install async --saved'autres
Modules Promise tels que bluebird, q, etc.) Parce que le module mysql de
Node.jsencapsule 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 }; }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
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); } }) } }) }); }); }
.
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!