前言
安装方式
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();
};
结束