我对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/