【发布时间】:2019-09-17 06:26:33
【问题描述】:
我是 Nodejs 的新手,我有一个在 NodeJS 上编写的 lambda 函数,它应该删除一些行并在 mysql db 上插入一些数据。 我遇到过各种带有错误消息的实例,例如 PROTOCOL_SEQUENCE_TIMEOUT、PROTOCOL_CONNECTION_LOST 以及无法解析 RDS db 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;
};
而且我是在使用连接到数据库的最佳方法,就像在池中一样,还是应该只使用连接等?
【问题讨论】:
-
根据您最近的几篇帖子,您似乎在使用新的堆栈方面取得了良好的进展。您选择使用的架构的每个元素都为出错提供了独特的机会,因此您的设置和整体方法的额外背景可能会有所帮助。例如:您的 RDS 实例的具体情况是什么,
values平均创建了多少条记录,同时发生了哪些其他并发操作,还有哪些其他文件支持这些活动(它们是如何触发的)。这些错误不是 MySQL 协议的一部分
标签: mysql node.js aws-lambda