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

时间:2018-10-02 16:39:01

标签: 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中时,我们不会遇到相同的问题。

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

1 个答案:

答案 0 :(得分:0)

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

从节点mysql readme

  

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

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