javascript - 在本地运行SLS函数以进行单元测试,结果是 Node Mysql连接池“连接过多”

标签 javascript mysql node.js aws-lambda serverless

我对Serverless相对较新,并且一直在本地运行我的函数以用于Jest单元测试。使用Node-Mysql,我通过调用mysql.createPool创建一个连接池,然后在需要进行查询时再调用pool.query。我正在假设pool.query实际上是调用pool.getConnection,connection.query以及最后是connection.release的快捷方式。因此,一旦它们完成了查询处理,连接就可以再次使用。

我遇到的问题是当我运行单元测试时,它们都第一次运行,但是如果第二次运行,则由于“错误:ER_CON_COUNT_ERROR:连接过多”而失败。

当函数托管在AWS Lambda中时,不会出现相同的问题。

是否有人经历过类似的事情,或者有人有任何建议的解决方法来缓解此问题,这仅是本地问题?

最佳答案

您需要调用pool.end来关闭所有池连接。否则,连接将一直打开,直到MySql服务器关闭它们为止。

从节点mysql readme


  使用完池后,您必须结束所有连接,否则Node.js事件循环将保持活动状态,直到MySQL服务器关闭连接为止。


在生产中可能不会发生这种情况,因为AWS Lambda尝试重用执行环境,因此在实践中只有少数执行会创建新池并打开新连接。

关于javascript - 在本地运行SLS函数以进行单元测试,结果是 Node Mysql连接池“连接过多”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52612741/

相关文章:

javascript - 启动 node.js 服务器

mysql - 如何让用户只能查看表中的某些行

php - 图片上传脚本无法正常工作

javascript - 打开侧面菜单时更改正文的 alpha 值

javascript - 如何将音频放在数据表之外?

javascript - "this" meteor 模板中的关键字

node.js - Socket.IO 启动客户端到第三方服务器的连接

jquery - 为 browserify 调整 jQuery Node

javascript - 跟踪 jqplot 垂直折线图的鼠标位置

java - 如何将大文本存储到数据库中以将其称为网络博客文章(MySql)