作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 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()
函数只是从池中获取一个空闲连接,或创建他们一个。问题是我这辈子都无法将它作为免费
释放回池中..每次我用conn.end()
而不是发出请求释放
连接保留在池的 _allConnections
数组中,当我控制它时,_freeConnections
数组中绝对没有连接。
有谁知道我怎样才能让连接再次免费??
最佳答案
查看模块的代码,我找到了从池中释放连接的函数:
pool.prototype.releaseConnection = function releaseConnection(connection) {
//Use the underlying connection from the mysql-module here:
return this.pool.releaseConnection(connection.connection);
};
因此,如果所有这些函数都在同一个文件中,您可以在 getUser 函数中执行以下操作:替换
conn.release();
与
pool.releaseConnection(conn);
关于mysql - Promise-MySQL 无法将连接释放回池中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35491132/
我是一名优秀的程序员,十分优秀!