作为Lambda培训工作的一部分,我试图编写一个通过API网关触发Lambda函数的简单应用程序。然后,该Lambda函数通过AWS开发工具包连接到DynamoDB,并尝试删除现有表。
当我对API网关端点执行POST
时,Lambda函数将触发。我收到的响应为{}
,这意味着result
从未在初始化值之外重新分配。据我所知,deleteTable
方法永远不会触发。我从没见过console.log()
或console.error()
,它们都存在于回调的正文中。
请在下面找到详细信息:
POST
端点这是代码。我有很多事情要做,但是当我无法执行删除操作时,将其缩小为:
exports.handler = async (event) => {
var aws = require('aws-sdk');
var dynamodb = new aws.DynamoDB();
var params = {
TableName: "StudyGuideSections"
};
var result = {};
dynamodb.deleteTable(params, function(err, data) {
console.log('Entering deleteTable callback...');
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
result = data;
}
});
return {
statusCode: 200,
"headers": {
"Access-Control-Allow-Origin": "*"
},
body: JSON.stringify(result)
};
};
$.post
的简单Web应用程序我查看了 CloudWatch 和 X-Ray 日志,但我从未看到错误,也没有看到console.log()尝试在deleteTable()
调用的正文中。
这时我几乎要拔头发了,因为它阻碍了我的训练。任何帮助将不胜感激。
编辑:为进一步说明,我可以将返回值的主体更改为类似于“ Hello World!”的内容。我得到了回应。另外,我可以在console.log('Attempting to delete table...")
调用之前放置deleteTable
;当我这样做时,我会在CloudWatch中看到它。我只是从来没有从deleteTable
方法内部看到日志。
答案 0 :(得分:1)
我终于想通了。因为我使用的是Node.js 8.10,所以我需要使用 Promise 结构而不是 Callback 结构。
编辑:
正如Kalev所说,我在处理程序中使用case Device.iOS: MainPage = new Login_iOS();
函数的事实是必须使用Login_iOS
和async
的事实,而不是我在使用的事实Node.js 8.10,仍支持回调结构。
例如,除了我最初的尝试,我还需要做更多这样的事情:
await
要特别注意.promise()
,因为那是我搞砸的部分。