前言
 
 
安装方式
 
 
 
let genericPool = require('generic-pool');
let mysql = require('mysql');
let DEFAULT_MIN_POOL_SIZE = 5;     
let DEFAULT_MAX_POOL_SIZE = 20;    
let DEFAULT_IDLE_TIMEOUT_IN_MILLIS = 30 * 1000; 
module.exports = function () {
    return genericPool.createPool({
        name: 'mysql',
        create: function () {
            let client = mysql.createConnection({
                host: 'host',
                port: '3306',
                user: 'root',
                password: '123456',
                database: 'db1',
                charset: 'utf8mb4',
                multipleStatements: true,
            });
            
            
            return client;
        },
        destroy: function (client) {
            client.destroy();
        }
    },{
        max: mysqlConfig.pool.max || DEFAULT_MAX_POOL_SIZE,
        min: mysqlConfig.pool.min || DEFAULT_MIN_POOL_SIZE,
        idleTimeoutMillis: mysqlConfig.pool.idleTimeoutMillis || DEFAULT_IDLE_TIMEOUT_IN_MILLIS,
        priorityRange: 3,
        log: false
    });
};
 
 
 
let sqlclient = module.exports;
let _pool;
let NND = {};
NND.init = function(){
	_pool = require('./dao-pool')();
};
NND.query = function(sql, args, cb){
	_pool.acquire().then(function (client){
		client.query(sql, args, function (err, res) {
			_pool.release(client);
			cb && cb(err, res);
		});
	}).catch(function (err) {
		cb && cb(err);
	});
};
NND.promiseQuery = function (sql, args) {	
	return new Promise(function (resolve) {
		NND.query(sql, args, function (err, res) {
			if (!!err){
				console.error("promiseQuery err:", err.message);
				resolve(null);
			} else {
				resolve(res);
			}
		});
	});
};
NND.shutdown = function(){
	_pool.drain().then(function () {
		_pool.clear();
	});
};
sqlclient.init = function() {
	if (!!_pool){
		return sqlclient;
	} else {
		NND.init();
		sqlclient.query = NND.query;
		sqlclient.promiseQuery = NND.promiseQuery;
		return sqlclient;
	}
};
sqlclient.shutdown = function() {
	NND.shutdown();
};
 
结束