Hi,为确保您的账号安全,请大家修改登陆密码为包含大小写字母、标点、数字的复合密码,不要使用过于简单的登陆密码。
您当前的位置:首页 :: Nodejs

nodejs一个mysql连接池的运用小编直接奉上,拿去可直接使用

时间:2016-10-03 13:03:20  来源:精灵网  作者:

 nodejs一个mysql连接池,可以直接使用,我直接上代码:

 

/**
 * 数据库模块
 */
//var config = require("../config");
var options = {
    'host': 'localhost',
    'port': '3306',
    'user': '',
    'password': '',
    'database': '',
    'charset': 'UTF-8',
    'connectionLimit': '20',
    'timeout' : 50000
};
var util = require('util');
var poolModule = require('generic-pool');
console.log("init pool start..");
var pool = poolModule.Pool({
    name : 'mysql',
    create : function(callback){
        var  mysql = require('mysql');
        var  conn = mysql.createConnection({
            host : options.host,
            port : options.port,
            user : options.user,
            password : options.password,
            database : options.database,
            bigNumberStrings : true,
            supportBigNumbers : true
        });
        conn.connect(function(err){
            if(err){
                console.log('connection err :'+ err);
                return;
            }else{
                //console.log('connected to mysql');
            }
        });
        conn.query("SET NAMES utf8mb4");
        conn.query('USE '+options.database);
        callback(null, conn);
    },
    destory : function(client){
        if(client.connected){
            try{
                client.end();
            }
            catch(err){
                console.log('Failed to close MySQL connection: ' + err);
            }
        }
    },
    max : options.connectionLimit,
    idleTimeoutMillis : options.timeout,
    log : false
});
console.log("init pool end....");

exports.exec = function(sql, data, callback){
    if(util.isArray(data)){
        pool.acquire(function(err, client){
            if(err){
                callback(err);
                return;
            }
            client.query(sql,data, function(err, rows){
                pool.release(client);
                if(err){
                    callback(err, null);
                    return;
                }
                callback(err, rows);
            });
        });
    }else{
        pool.acquire(function(err, client) {
            if(err){
                data(err);
                return;
            }
            client.query(sql, function(err, rows){
                pool.release(client);
                if(err){
                    data(err, null);
                    return;
                }
                data(err, rows);
            });
        });
    }
};
//查询一条记录,

exports.execOne = function(sql, data, callback){
    if(util.isArray(data)){
        pool.acquire(function(err, client){
            if(err){
                callback(err);
                return;
            }
            client.query(sql, data, function(err, rows){
                pool.release(client);
                if(err){
                    callback(err, null);
                    return;
                }
                console.log(rows);
                callback(err, rows[0]);
            });
        });
    }else{
        pool.acquire(function(err, client){
            if(err){
                data(err);
                return;
            }
            client.query(sql, function(err, rows){
                pool.release(client);
                if(err){
                    data(err, null);
                    return;
                }
                data(err, rows[0]);
            });
        });
    }
};

//update or delete
exports.upDel = function(sql, data, callback){
    if(util.isArray(data)){
        pool.acquire(function(err, client){// query有三个参数,分别是sql(prepared),参数,callback
            if(err){
                callback(err);
                return;
            }
            client.query(sql, data, function(err, result) {
                pool.release(client);
                if(err){
                    callback(err, null);
                    return;
                }
                callback(err, result);// 必须有callback
            });
        });
    }else{
        pool.acquire(function(err, client){// query有2个参数,分别是sql,callback
            if(err){
                data(err);
                return;
            }
            client.query(sql, function(err, result) {
                pool.release(client);
                if(err){
                    data(err, null);
                    return;
                }
                data(err, result);// 必须有
            });
        });
    }
};

 

上面你设置了20个连接数,也是说一直会开20个连接池供系统调用,这个值你可以修改,当开满20个连接数后使用完了,会师释放到连接池子里。借其他进程使用。

 

 

举报
收藏0次 / 评论0
评论(0)
还可以输入 2000 个字符
还可以输入 2000 个字符
取消回复
举报×

还可以输入 264 字符

收藏(0)×