【发布时间】:2018-06-05 16:07:48
【问题描述】:
在我的 Lambda 函数和 AWS 上的 API Gateway 的帮助下,我无法在我的 DynamoDB 表中存储 JSON 文件。我有以下一段代码,一旦我按下我的 HTML 网站上的按钮,就会执行:
$('#submit').on('click', function(){
var example = {"number":"121212"};
$.ajax({
type: 'POST',
url: API_URL,
data: JSON.stringify(example),
contentType: "application/json",
success: function(data){
location.reload();
}
});
return false;
});
按下时网站会重新加载,因此我认为功能已成功执行。但是我的问题是数据在 lambda 函数中没有以正确的格式到达,因此无法正确执行。签入 CloudWatch 时,它显示为 { number: '121212' } 而不是 {"number":"121212"}。知道如何确保值“到达”在我的 Lambda 函数中具有有效的 JSON 格式吗?
这是我的 Lambda 函数:
exports.handler = function index(e, ctx, callback) {
var params = {
Item: { number: e.number },
TableName: 'collectionOfNumbers'
};
docCLient.put(params, function(err, data) {
if (err) {
callback(err, null);
} else {
callback(null, data);
}
});
}
【问题讨论】:
-
{ number: '121212' } 表示对我来说似乎是合理的。你是如何在 Lambda 函数中使用这个值的?出了什么问题?
-
感谢您的回答。这是我链接到我的 API 网关的 post 方法的 Lambda 函数(由于字符限制,我省略了 docClient 和 AWS-sdk)。本质上它不会将值写入数据库。 exports.handler = function index(e, ctx, callback){ var params = { Item: { number: e.number }, TableName: 'collectionOfNumbers' }; docCLient.put(params, function(err, data){ if(err){ callback(err, null); }else{ callback(null, data); } }); }
-
您是说 put() 调用成功,但您在 DynamoDB 表中没有看到任何证据表明已写入项目?您是否有可能只是覆盖现有项目,因此表中的项目数不会改变?
-
此外,CORS 已启用,我已授予 IAM 中该功能的大量读/写权限
-
我认为它甚至没有进入 put() 调用,因为我的 CloudWatch 给了我以下错误(抱歉,我应该在前面提到这一点): SyntaxError: Unexpected token o at Object.在索引处解析(本机)(/var/task/index.js:10:22)
标签: json amazon-web-services aws-lambda amazon-dynamodb aws-api-gateway