【发布时间】:2016-05-31 04:33:01
【问题描述】:
我是 Node.js 开发的新手,我正在开发一个需要我从 mysql 数据库中提取用户的应用程序。我正在使用promise-mysql 库来查询 mysql 数据库。我正在尝试使用这样的连接池:
var pool = mysql.createPool({
host: hgh.host,
user: hgh.user,
password: hgh.pw,
database: hgh.name,
connectionLimit: 10
});
作为我模块中的全局变量。
然后我有上面的函数从池中返回一个连接。
function connect() {
return pool.getConnection().then(function(connection) {
return connection
}).catch(function(error) {
console.log("Connect failed");
throw ErrorModel.generateErrorObject(error, 500);
});
}
下面是我用来查询数据库的函数:
function getUser(username) {
var sql_query = `SELECT * FROM userstable WHERE userName = ` + `'` + username + `'`;
return connect().then(function(conn) {
return conn.query(sql_query).then(function(rows) {
console.log("HGH getUser Then");
console.log(pool);
conn.release();
return rows;
});
}).catch(function(error) {
console.log("HGH getUser Catch");
console.log(error);
throw ErrorModel.generateErrorObject(error, 500);
});
}
我遇到了这个问题:
conn.release 在尝试将我当前的连接释放到池中时不是一个函数。我的逻辑在这里错了吗?我的目标是拥有一个包含一堆连接(最多一定数量)的池,如果用户需要查询,getConnection() 函数只是从池中获取一个免费连接,或者创建一个。问题是我不能以free 的形式将其释放回池中。每次我使用conn.end() 而不是release 发出请求时,连接仍保留在池的_allConnections 数组中解决它,_freeConnections 数组中绝对没有任何连接。
有谁知道我怎样才能让连接再次免费?
【问题讨论】: