mysql连接池模块

如果不想程序在查询数据时卡死或等待过长时间,一般不推荐在node中开启一个连接后全部查询都用这个链接并且不关闭。因为node里面的mysql不像php里的那样会在完成查询后断开,只要不主动断开,连接一直存在,当连接数量达到一定数量时就会产生严重的阻塞,出现各种延时和卡死现象。在并发量较大时,可以通过建立连接池来缓解并发压力。

在node中的mysql模块里其用来操作数据的query()方法接收的参数是不同的,在使用时需要特别注意。具体模块如下:

/**
 * mysql连接池模块
 * @author jeri
 * @time  2016.5.24           
 */

var mysql=require("mysql");
/**
 * 连接池建立
 * @pool {object}
 */
var pool = mysql.createPool({  
    host: 'localhost',  
    user: 'root',  
    password: '',  
    database: 'movielens',  
    port: 3306  
});  

/**
 * select和delete操作
 * @param  {string}   sql      sql语句
 * @param  {Function} callback 回调函数
 * @return {none}            
 */
var sdQuery=function(sql,callback){  
    pool.getConnection(function(err,conn){  
        if(err){ 

            console.log('CONNECT ERROR:', err.message); 
            callback(err,null,null);  
        }else{  
            conn.query(sql,function(qerr,vals,fields){  
                //释放连接  
                conn.release();  
                //事件驱动回调  
                callback(qerr,vals,fields);  
            });  
        }  
    });  
};  

/**
 * update和insert操作
 * @param  {string}   sql      sql语句
 * @param  {array}    params   参数数组 
 * @param  {Function} callback 回调函数
 * @return {none}            
 */
var uiQuery=function(sql,params,callback){  
    pool.getConnection(function(err,conn){  
        if(err){ 
            
            console.log('CONNECT ERROR:', err.message); 
            callback(err,null,null);  
        }else{  
            conn.query(sql,params,function(qerr,vals,fields){  
                //释放连接  
                conn.release();  
                //事件驱动回调  
                callback(qerr,vals,fields);  
            });  
        }  
    });  
};  

/**
 * query函数重载
 * @return {none}
 */
var query = function(){

    var len = arguments.length;
    if(len==2) {
        var sql = arguments[0];
        var cb = arguments[1];
        sdQuery(sql, cb);
    } else if(len == 3){
        var sql = arguments[0];
        var params = arguments[1];
        var cb = arguments[2];
        uiQuery(sql, params, cb);

    } else {
        console.log('ERROR:', '传参不对');
    }
};

// 暴露接口
module.exports = query;

 

posted @ 2016-05-24 14:29  默语  阅读(1266)  评论(0编辑  收藏  举报