我的第一个问题是方法。这是正确的方法吗?
我有一个React前端,我调用了API网关=>这会触发lambda => lambda进行数据库查询=>返回API Gateway => react
第二,我的问题是
我有以下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.
,但无济于事
我在做什么错了?
答案 0 :(得分:0)
从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]);
});
});
}