我的第一个问题是关于方法。这是正确的方法吗?
我有一个反应前端,我打电话给API网关=>这个触发器lambda => lambda使得DB查询=>返回API网关=>反应
其次,我的问题是如何
我有这个lambda代码:
var pool = mysql.createPool({
host : RDSINSTANCE,
user : USER,
password : PASSWORD,
database : DBNAME
});
exports.handler = (event, context, callback) => {
context.callbackWaitsForEmptyEventLoop = false
pool.getConnection(function(err, connection) {
connection.query('SELECT * FROM exercises', function (error, results, fields) {
connection.release();
if (error) context.fail(error)
else context.succeed(null, results[0])
});
})
}
我可以确认当我将代码更改为本地节点兼容时,它正确地返回了我之后的行,因此RDS设置正确,因为它是javascript代码。
但是,我的lambda正在超时
我添加了这一行:context.callbackWaitsForEmptyEventLoop = false
,因为有些人说这是一个问题。然而,仍然超时
我也尝试使用callback
而不是context.
但无济于事
我究竟做错了什么?
从API网关到Lambda的流程是正确的方法。
我建议使用callback
而不是context
将信息传递给调用者,因为这是官方记录的方式。 1
您应该考虑Lambda可能无法从池中获取连接对象并处理该方案。
exports.handler = (event, context, callback) => {
context.callbackWaitsForEmptyEventLoop = false;
pool.getConnection(function(err, connection) {
if (err)
callback(err);
connection.query('SELECT * FROM exercises', function (error, results, fields) {
connection.release();
if (error) callback(error);
else callback(null, results[0]);
});
});
}