mysql查询后不释放池连接

时间:2018-07-24 20:04:44

标签: mysql node.js typescript npm es6-promise

使用mysql nodeJS模块,我创建了一个小的数据库打字稿文件来帮助我处理池和查询。

第一个函数是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(...)执行完成之前释放了sqlConnection,因为sqlConn.release();在内部第一个.then()函数的connect ...但是,如果我将sqlConn.release();移到sqlConn.query的回调中,我会收到一条错误消息

  

错误:连接已释放

0 个答案:

没有答案