Nodejs连接服务器连接mysql数据库(带事务功能)

来源:互联网 发布:地铁刷卡数据存闸机 编辑:程序博客网 时间:2024/06/05 19:08

mySqlJustQuery.js

/** * 获取连接,该连接提供事务功能的数据库功能 * funcName : 回调参数名,提供回调入口 */exports.getClient =function (funcName){    query.pool.acquire(function(err,client){        client.query("BEGIN;",function(err,rows,fields){            funcName(err,client);//事务功能开始。执行回调函数        })    })}/** * 如果发生错误,回滚所有事物 * client :要关闭的连接 * funcName :下一个要执行的名字(一般直接响应给客户端,请求执行失败) */exports.rollBack = function(client,res,data){    client.query("rollBack;",function(err,rows,fields){        query.pool.release(client);//关闭资源        //funcName(err,res)        if(data.render){            var renderStr = data.render;            delete data["render"];//返回响应页面            res.render(renderStr,data)        }else {            res.send(data);//响应请求处理值        }    })}/** * 提交事务:异步提交事务并关闭连接 * client :连接 * funcName :下一个要执行的名字(一般直接响应给客户端,返回执行结果) */exports.endT = function(client,res,data){    client.query("COMMIT;",function(err,rows,fields){        //if(err)mySql.rollBack(client,funcName,res,"数据库执行错误");        query.pool.release(client);//关闭资源        //funcName(err,res)        if(data.render){            var renderStr = data.render;            delete data["render"];            res.render(renderStr,data);        }else {            res.send(data);//响应        }    })}/** * 执行sql语句 * sql :要执行的sql语句 * client :连接 * funcName :下一个要执行的名字 */exports.querySql = function(sql,client,funcName){    client.query(sql,function(err,rows,fields){        var result = {};            result.status = "成功";        if (err){            result.status = "失败";            result.err = err;        }else{            if(rows.insertId > -1){                result.affectedRows = rows.affectedRows;//受影响的行                result.changedRows = rows.changedRows;//值发生改变的行                if(rows.insertId > 0)result.insertId = rows.insertId;//insert的时候返回添加时的id            }else{                result.data = rows;//如果是select时返回列表            }        }        funcName(err,client,result);//result数据格式为{status:"成功or失败",data:"Array Or JSON"}    })}

使用流程
test.js

//事务开始var mysqlT= require("../public/mySqlJustQuery.js");module.exports.run = function(conn,body){    mysqlT.getClient(doSql);//获取连接    function doSql(err,client){        mysqlT.querySql("update user set username = 'test'",client,checkUser);    }    function checkUser(err,client,result){        if(err || result.status != "成功" || !result.data.length){            mysqlT.rollBack(client,res,'{status:"失败"}');//如果执行失败回滚        }else{            mysqlT.endT(client,res,'{status:"成功"}');//响应        }        mysqlT.querySql("update user set passWord= 'test'",client,response);    }    function response(err,client,result){        if(err || result.status != "成功" || !result.data.length){            mysqlT.rollBack(client,res,'{status:"失败"}');//如果执行失败回滚        }else{            mysqlT.endT(client,res,'{status:"成功"}');//响应        }    }};