我是Nodejs的新手,我在NodeJS上编写了一个lambda函数,该函数应该删除一些行并在mysql db上插入一些数据。 我遇到了各种带有错误消息的实例,例如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;
};
而且我是否正在使用最佳方法来连接数据库(如在池中),还是应该仅使用连接等?
答案 0 :(得分:0)
您可以缓存连接,因此第一次调用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块中进行连接重试。