长风破浪会有时
直挂云帆济沧海

nodejs里关于mysql事务的处理

  当有多个sql语句要执行且要避免有一个地方出错而影响之前事务执行时,就要用到mysql事务处理功能了。

 getMysqlDatabasesArray(option,connection){
        const errs = {
            message : "参数有误",
            code : 400,
            data : []
        };
        return new Promise((resolve,reject)=>{
            //启动事务
            connection.beginTransaction(function (err) {
                //如果报错,取消执行
                if (err) {
                    connection.release();
                    reject(errs);
                }
                let funcAry = [];
                option.forEach(function (sql_param) {
                    if(typeof sql_param.value === "undefined" || typeof sql_param.value === undefined){
                        sql_param.value = null;
                    }
                    let querySql = {
                        sql : sql_param.sql,
                        values : sql_param.value
                    };
                    //定义多个sql语句
                    let temp = function(cb){
                        connection.query(querySql, function (tErr, rows, fields) {
                            return cb(tErr,rows);
                        })
                    };
                    //存入一个数组
                    funcAry.push(temp);
                });
                //异步执行
                async.series(funcAry, function (err, result) {
                    if (err) {
                        //如果出错,回滚之前步骤
                        connection.rollback(function (errv) {
                            connection.release();
                            reject(errs);
                        });
                    } else {
                        //commit提交
                        connection.commit(function (err, info) {
                            if (err) {
                                connection.rollback(function (err) {
                                    connection.release();
                                    reject(errs);
                                });
                            } else {
                                connection.release();
                                let cbDatas = {
                                    message : "操作成功",
                                    code : 200,
                                    data : info
                                };
                                resolve(cbDatas);
                            }
                        })
                    }
                })
            });
        })
    }

事务处理会用到async中间件,可以执行多个sql操作。

赞(4)
未经允许不得转载:阿锋哥前端开发经验分享 » nodejs里关于mysql事务的处理
分享到: 更多 (0)

几百块就能做营销型企业网站?

查看详情