我对Serverless相对较新,并且一直在本地运行我的函数以用于Jest单元测试。使用Node-Mysql,我通过调用mysql.createPool创建一个连接池,然后在需要进行查询时再调用pool.query。我正在假设pool.query实际上是调用pool.getConnection,connection.query以及最后是connection.release的快捷方式。这样,一旦它们完成了查询处理,就可以再次使连接可用。
我遇到的问题是,当我运行单元测试时,它们都第一次运行,但是如果第二次运行,则由于“错误:ER_CON_COUNT_ERROR:连接太多”而失败。
当该功能托管在AWS Lambda中时,我们不会遇到相同的问题。
有人经历过类似的事情吗,或者有人有任何建议的解决方法来缓解这种情况,这仅是本地问题?
答案 0 :(得分:0)
您需要致电pool.end
来关闭您一端的所有池连接。否则,连接将一直打开,直到MySql服务器关闭它们为止。
从节点mysql readme:
使用完池后,您必须结束所有连接,否则Node.js事件循环将保持活动状态,直到MySQL服务器关闭连接为止。
在生产中可能不会发生这种情况,因为AWS Lambda尝试重用执行环境,因此实际上只有少数执行会创建一个新池并打开新连接。