使用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
的回调中,我会收到一条错误消息
错误:连接已释放