mysql查询后未释放池连接

bxjv4tth  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(257)

使用 mysql 在nodejs模块中,我创建了一个小的数据库typescript文件来帮助我处理池和查询。
第一个功能是 connect 它回报了一个承诺

static connect(): Promise<any> {
return new Promise((resolve, reject) => {
  fs.readFile('includes/config.txt', (err, data) => {
    if (err) {
      console.log('seems like config.txt file is corrupted, ignore message if connection established');
    } else {
      data = data.toString().split('\n');
      host = data[0].substr(3);
      user = data[1].substr(5);
      password = data[2].substr(5);
      pool = mysql.createPool({
        host: host,
        user: user,
        password: password,
        database: DB_NAME,
        connectionLimit: 10
      });
      pool.on('release', (connection) => {
        console.log('releasing your connection now');
      });
      pool.getConnection((err, connection) => {
        if (err) { reject(err); }
        resolve(connection);
      });
    }
  });
});};

然后我有另一个函数“spquery”帮助我进行查询,然后在查询完成后释放连接

static spQuery(command: string, data, req?): Promise<any> {
data.push(JSON.stringify(adata));
command = command.slice(0, command.lastIndexOf('?') + 1) + ', ?)';
console.log('Command: ' + command);
console.log('Values: ' + data);
return new Promise((resolve, reject) => {
  this.connect().then(conn => {
    sqlConn = conn;
    sqlConn.query(command, data, (err, results) => {
      if(err){
        reject(err);
      } else{
        results = results[0];
        resolve(results)
      }
    });
  }).catch(err => {
    return reject(err);
  }).then( () => {
    sqlConn.release();
  });
});}

现在我想可能错的是 spQuery 函数,我想我可能在 sqlConn.query(...) 执行完毕,因为 sqlConn.release(); 是在 .then() 第一个的 connect 函数。。。但是如果我移动 sqlConn.release(); 进入了 sqlConn.query 我听到一个错误说
错误:连接已释放

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题