[英]Not closing connection on MySql nodejs cause timeout lambda AWS
我在 AWS lambda 上有一個代碼,可以查詢 AWS RDS MySQL DB。
每次需要插入數據庫時,它都會運行此 class:
const mysql = require('mysql');
const config = require('../config.js');
const con = mysql.createConnection(config);
async function insert_score_db(user,message_id,date_created,sprint){
//con.connect(function(err) {
//if (err) throw err;
console.log("Connected!");
var sql = "INSERT INTO user_records (user_name,message_id, date_created,sprint) VALUES ('"+user+"', "+ message_id + ", '"+date_created+"',"+ sprint+");";
con.query(sql, function (err, result) {
if (err) throw err;
console.log(result);
});
//con.end();
//con.destroy();
//});
}
module.exports={
insert_score_db
};
正如文檔所說,我沒有使用**con.connect(function(err){**
因為任何query
調用都隱式地建立了連接。
我還評論**con.end()**
因為這個 function 是由嵌套的異步循環運行的,它會導致以下排隊 Hanshake:
ERROR Uncaught Exception {"errorType":"Error","errorMessage":"Cannot enqueue Handshake after invoking quit.","code":"PROTOCOL_ENQUEUE_AFTER_QUIT","fatal":false,"stack":["Error: Cannot enqueue Handshake after invoking quit."," at Protocol._validateEnqueue
我擺脫了**con.end()**
並且所有代碼都正常運行,但 function 以: Task timed out after 210.10 seconds
。 我的猜測是數據庫連接永遠不會關閉到 lambda 執行無法完成。
使用嵌套異步循環運行數據庫查詢的潛在解決方案是什么?
將con.end()
和con.destroy()
放在con.query con.query()
) 的回調 function 中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.