mysql - 使用 Node.js 并在 AWS lambda 中编写的关闭数据库连接(Mysql)的正确方法是什么
问题描述
我正在使用用 node.js 编写的 finally 块来关闭我在代码中打开的数据库连接。代码片段附在下面。
我面临的问题:-当我在本地机器上执行以下代码时,我的 finally 块被执行,这得到了安慰“dbconnection close 后的响应:”。
但是,当我在 AWS lambda 中执行它时,我会从我的最后一个 then 块中获得响应,并且当我的 finally 块执行时,它不会控制台函数日志中的“dbconnection close 后的响应:”。
所以连接保持打开状态。
当我再次点击 lambda 函数时它会关闭。但留下了最新执行的 Open 连接。
请让我知道如何正确使用 finally 块,或者我应该在最后一个块中关闭连接吗?
exports.executeSelectQueryPromise = (sql, args, parameters) => {
sql = " SELECT * FROM ( " + sql + " ) as dataTable ";
let DBConnection;
return mysql.createConnection(process.env)
.then(async (conn) => {
DBConnection = conn;
return DBConnection.query(sql, args);
}).then(async (rows) => {
let result = {
"statusCode": 200,
"headers": {
"Access-Control-Allow-Origin": "*"
},
"body": [],
"isBase64Encoded": false
}
return result;
}).catch(async (error) => {
console.log("Error: ", error);
let err = {
"statusCode": 400,
"headers": {
"Access-Control-Allow-Origin": "*"
},
"body": [],
"isBase64Encoded": false
}
return err;
})
.finally(async () => {
console.log("DB connection type: ", typeof DBConnection);
if (DBConnection && DBConnection.end) {
DBConnection.end()
.then(res => console.log("Response after dbconnection close: ", res))
.catch(e => console.log("Error in dbconnection close: ", e));
}
});
}
解决方案
更好的做法是在查询执行后立即关闭连接,无论执行成功或不成功。
推荐阅读
- java - 出现错误:“web.xml 绝对排序标记处的片段名称错误”
- ios - 网络蓝牙在移动设备中的可用程度如何?
- javascript - 使用javascript计算输入字段中数据的总和
- python - 将 Avro 文件直接创建到 Google Cloud Storage
- design-patterns - 狼人(社会演绎)游戏的设计模式
- mysql - 从表中选择一行或另一行,具体取决于其他行是否存在
- types - 强类型枚举作为 rust 中的联合:如何确定值的类型并检索它;如何做“构造函数”
- microsoft-graph-api - 如何使用 Microsoft Graph 中的守护程序获取“我”URL
- dynamics-crm - 允许联系人跨多个帐户查看案例 Dynamics 365 门户
- c# - Xamarin.forms - 具有 3 种不同更改方法的 3 个选择器感到困惑