node pool 不释放连接池
背景:node v8.11.2
问题描述:只有下面这个方法 无法释放连接
问题代码
function getTimes(req, response) {
var sql = 'SELECT times FROM settime_book_times WHERE managerid=1070 ORDER BY times';
mysql.execute(sql,function(err, result) {//这一行有问题源
if(err) {
response.send(err)
} else {
var sql_dt = 'SELECT select_tt, select_dt, COUNT(select_tt) AS groups FROM select_book_dt WHERE proManage_son=? AND select_dt=? GROUP BY select_tt';
mysql.execute(sql_dt, [
req.body.promanager_son,
req.body.days
], function(errs, results) {
if(errs) {
response.send(err)
} else {
response.send(results);
}
})
}
})
}
连接池代码
var mysql = require('mysql'); //操作数据库 版本2.11.1
const config = require('../config');
//配置数据库连接池
var pool = mysql.createPool({
host: config.mysqlhost,
port: config.mysqlport,
database: config.mysqldatabase,
user: config.mysqluser,
password: config.mysqlpassword,
connectionLimit: 15
});
function execute(sql, parameter, callBack) {
try {
pool.getConnection(function(err, conne) {
if(err) {
conne.release();
callBack("线程池连接异常");
} else {
console.log("已连接")
conne.query(sql, parameter, function(err, result) {
if(err) {
conne.release();
callBack(err);
} else {
conne.release();
callBack(null, result);
}
});
}
});
} catch(e) {
console.log("创建连接异常", e)
}
}
在pool 源码中没有进行回调,也不报错!
也就是说conne.query()没有执行回调方法, 却可以正常的获取数据。
查看后发现, mysql.execute(sql,function(err, result) {})中的参数列表不能省略,
标准写法: mysql.execute(sql,parameter,function(err, result) {})
如果参数列表为空 也不能省略。 可以写 [ ] 或 null、不能省略不写。