gpt4 book ai didi

mysql - Nodejs mysql如何处理超时和握手不活动超时

转载 作者:行者123 更新时间:2023-11-29 15:38:23 26 4
gpt4 key购买 nike

我是 Nodejs 的新手,我有一个在 NodeJS 上编写的 lambda 函数,该函数应该删除一些行并在 mysql 数据库上插入一些数据。我遇到过各种带有错误消息的实例,例如 PROTOCOL_SEQUENCE_TIMEOUT、PROTOCOL_CONNECTION_LOST 以及无法解析 RDS 数据库 dns 并连接到数据库的实例。

我想知道如何处理这些事件,以便能够重新连接并继续。

var mysql = require('mysql');

var pool = mysql.createPool({
host : 'somehost',
user : 'someuser',
password : 'somepassword',
database : 'somedb',
port : 3306
});

pool.on('connection', function (connection) {
console.log('Pool id %d connected', connection.threadId);
});

pool.on('enqueue', function () {
console.log('Waiting for available connection slot');
});


exports.handler = async (event, context) => {
context.callbackWaitsForEmptyEventLoop = false;
let request = JSON.parse(event.body);

/** SOME OTHER LOGIC HERE **/

let delete_query = "DELETE FROM answers WHERE sId= ? AND `key` = ?";
pool.query(delete_query, [sId, questionId], function(err, result){
if(err) throw err;
});

let insert_query = "INSERT INTO answers (qId, sId, `key`, value, hutk) VALUES ?";
pool.query(insert_query, [values], function(err, result){
if(err) throw err;
console.log("Successfull Insert")
});

const response = {
statusCode: 200,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials': true
},
body: JSON.stringify({message : 'success'}),
};
return response;
};

我是否使用最好的方法来连接到数据库(如在池中),或者我应该只使用连接等?

最佳答案

您可以缓存连接,因此对 lambda 的第一次调用将创建连接,第二次调用(如果 lambda 不是冷启动)可以重用该连接并且速度要快得多。

我们的做法如下:

  const mysql = require('mysql');
const util = require('util');

let mySQLconnection = undefined;

exports.handler = async function handler(event, context) {
try {
getMySQLConnection();
const queryResult = await mySQLconnection.query('Select * from yourtable where id = ? and attribute = ?', [id, attribute]);
} catch (error) {
console.log('ERROR: ' + error);
}
};

function getMySQLConnection() {
if (mySQLconnection !== undefined) {
return;
}
mySQLconnection = mysql.createConnection(yourConnectionJson);
mySQLconnection.query = util.promisify(mySQLconnection.query);
}

您还可以在 catch block 中重试连接。

关于mysql - Nodejs mysql如何处理超时和握手不活动超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57968490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com