nodejs 连接myslq报错: Cannot enqueue Handshake after invoking quit


在nodejs中使用 mysql 库连接数据库操作的时候,按照之前版本的代码连接数据库,常常会发现报错 Cannot enqueue Handshake after invoking quit ,通常的表现形式是一次成功一次失败。而代码检查了几次没有发现明显问题。
google了一下,在这里找到一个高赞解决方案:
大意就是 删除 .connect and .end. 的代码,我自己测试了一下,删除掉以后果然没有再报这个错误。但是问题是,如果 .connect 代码是有问题的话,为何在官方github里依然存在这行代码呢?
鉴于这个一次成功一次失败的特性,猜想可能是连接池的问题,当再次请求事,遇到了重复的连接池,就在issue里搜索了一下,有很多人似乎也遇到了这个问题。有人似乎也提到了这个原因:点击链接

当您有多个浏览程序运行的查询时,会发生此错误,并且在查询解决后,连接不会正确关闭。

这个人提到了使用 mysql.createPool 代替 mysql.createConnection,看了下mysql官方文档,是这么说的

mysql.createpool(config)新建一个内置的连接池,而不是创建和管理连接。这个 createpool 相当于 Pool.getConnection() - > connection.query() - > connection.release()代码流的捷径。使用pool.getConnection()可用于共享后续查询的连接状态。这是因为对pool.query()的两个调用可以使用两个不同的连接并并行运行。

针对我目前遇到的错误,都是发生在多次操作数据库的情况。 初步定位到了原因,这种情况应该更适合使用连接池来连接数据库。
于是,将mysql初始化代码
const dbInfo = require('../../conf/database');
const mysql = require('mysql');
const connection = mysql.createConnection(dbInfo);
connection.connect();
替换为
const dbInfo = require('../../conf/database');
const mysql = require('mysql');
const connection = mysql.createPool(dbInfo);
问题解决。目前运行良好。没有再出现同样的报错了。