MySQL NodeJS错误:使用事务调用退出后无法排队查询

问题描述 投票:0回答:1

我一直在为NodeJS和Restify实现MySQL,并且在查询方面一切正常。但是,当我想使用通过事务更新数据的功能时,出现以下错误:错误:调用退出后无法使查询入队。

这里是痕迹:

(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();
                });
            });

        });
    });

[如果有人可以帮助我看到错误,我将非常感谢。正如我之前说过的,只有在交易中才会发生这种情况。

javascript mysql node.js node-modules restify
1个回答
0
投票

问题已由我自己解决,当您对另一个查询进行以前的查询时要小心,当执行.end()时,mySql.createConnection()载体对象变为'Undefined'或'Null',因此它无法连接再次,直到再次创建它。我想很明显,如果实施方式不是最优的。

© www.soinside.com 2019 - 2024. All rights reserved.