我一直在为 NodeJS 和 Restify 实现 MySQL,并且在查询方面一切都运行良好。但是当我想使用通过事务更新数据的功能时,出现以下错误:Error: Cannot enqueue Query after invoking quit.
这是跟踪:
(node:10877) UnhandledPromiseRejectionWarning: Error: Cannot enqueue Query after invoking quit.
at Protocol._validateEnqueue (/home/node_modules/mysql/lib/protocol/Protocol.js:215:16)
at Protocol._enqueue (/home/node_modules/mysql/lib/protocol/Protocol.js:138:13)
at Connection.query (/home/node_modules/mysql/lib/Connection.js:201:25)
at Connection.beginTransaction (/home/node_modules/mysql/lib/Connection.js:154:15)
at Promise (/home/app/mysql/repository/ClientDao.ts:56:23)
at new Promise (<anonymous>)
at ClientDao.updateIps (/home/app/mysql/repository/ClientDao.ts:55:16)
at /home/app/routes/ips/put.ts:22:31
at Generator.next (<anonymous>)
at fulfilled (/home/app/routes/ips/put.ts:5:58)
这是代码:
this.conn.connect();
return new Promise<any>((resolve, reject) => {
this.conn.beginTransaction( (err) => {
if(err) {
reject(err);
return;
}
this.conn.query('UPDATE client SET ips_allowed = ? WHERE id = ?', [ips, client.id], (error, results, fields) => {
if(error) {
return this.conn.rollback(() => reject(error));
}
this.conn.commit((error) => {
if(error) {
return this.conn.rollback(() => reject(error));
}
this.conn.end();
});
});
});
});
如果有人能帮我看看这个错误,我将非常感激。正如我之前所说,这种情况只发生在我的交易中。
最佳答案
这个问题已经被我自己解决了,如果你之前对另一个查询进行查询,那么要小心,当你执行 .end() 时,mySql.createConnection() 载体对象会变成“未定义”或“空”,所以它不能再次连接,直到再次创建。我想如果实现方式不是最佳的话,这是显而易见的。
关于javascript - MySQL NodeJS 错误 : Cannot enqueue Query after invoking quit using transactions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58860813/