【发布时间】:2018-02-16 12:28:48
【问题描述】:
我有一个 NodeJS 应用程序,它是我的服务器,我创建了一个数据库类来帮助我处理查询我的 SQL DB。如果我在彼此之间发送一秒钟的请求,一切都运行良好.. 没问题.. 但是如果我开始向我的服务器发送垃圾邮件请求,它会因Error: Cannot enqueue Quit after invoking quit.
这是我的数据库类中的查询函数
static query(query: string): Promise<any> {
console.log('Query: ' + query);
return new Promise((resolve, reject) => {
this.connect().then(success => {
sqlConn.query(query, (err, results) => {
if (err) { return reject(err);
} else {
return resolve(results);
}
});
}).catch(err => {
return reject(err);
}).then( () => {
if (sqlConn.state !== 'disconnected') {
sqlConn.end();
}
});
});
};
这是this.connect() 函数
static connect(): Promise<any> {
return new Promise((resolve, reject) => {
sqlConn = mysql.createConnection(this.connectionData);
sqlConn.connect(err => {
if (err) { return reject(err); } else {
return resolve('SQL connection established');
}
});
});
};
我很确定问题有时会出现,但它仍然会 处理一个查询,然后另一个查询出现在第一个查询之前 一个完成,所以它会调用
sqlConn.end()两次,即使它是 已经断开连接?非常感谢任何帮助...> 主要目标是让查询等到 100% 完成后再运行 下一个..
【问题讨论】:
-
为什么你不为 mysql 连接定义一个池大小,我认为这可能会解决你的问题......并使用相同的连接进行第二次查询并设置一些空闲时间来结束你的连接
-
看看mysql npm模块的这一部分:npmjs.com/package/mysql#pooling-connections 你应该做的是从池中获取一个连接,执行查询,然后释放连接回查询。获取函数将在解决承诺之前自动等待空闲连接(或超时拒绝)。
标签: sql-server node.js typescript nodemon