【发布时间】:2020-01-15 07:04:18
【问题描述】:
我正在尝试使用 AWS DynamoDB、Lambda、API Gateway 和 S3 创建一个简单的网站。 DDB 有一个表,表中有一个条目。 S3 有一个用于网站 HTML 的简单文件。目标是在网站中显示位于 DDB 中的条目,如果我更新 DDB 中的值,那么刷新网站应该更改数字以反映 DDB 中的更新。目前,我有一个 lambda 函数,它成功地从 DDB 检索条目。我一直试图告诉 HTML 文件调用 lambda 函数并取回数据(使用 API Gateway)。我以前从未使用过 AWS,如果这甚至不是实现此目标的正确方法,请原谅我。
下面是 lambda 函数的代码:
'use-strict';
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: 'us-location-x'});
exports.handler = (event, context, callback) => {
let tableToRead = {
TableName: 'dataStore',
Limit: 10
};
docClient.scan(tableToRead, function(err,data){
if(err){
callback(err,null);
} else {
callback(null,data);
}
});
};
这是 S3 上的 HTML:
<html>
<head>
</head>
<body>
<h1> This number that's in DDB </h1>
<div id="entries">
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script type="text/javascript">
//This is the link generated by API Gateway
var API_URL = 'https://xxxxxxxxxx.execute-api.us-location-x.amazonaws.com/prod/retrieveDDB';
$(document).ready(function(){
$.ajax({
type: 'GET',
url: API_URL,
success: function(data){
$('#entries').html('');
data.Items.forEach(function(tableItem){
$('#entries').append('<p>' + tableItem.Row + '</p>');
})
}
});
});
</script>
</body>
</html>
当我使用“测试”按钮运行 lambda 函数时,它成功地从 DDB 检索数据。但是当我尝试运行 HTML 时,它确实会显示标题文本,但它不会附加来自 DDB 的值。我假设我只是不了解如何调用/解析 lambda 数据(如果我什至正确设置了它)。 提前感谢您的帮助!
【问题讨论】:
-
你在success方法里面得到
data吗?可以放console.log(data)并刷新html页面 -
@AshishModi 似乎没有数据。但是有这个 Cross-Origin Request Blocked: The Same Origin Policy disallows read the remote resource at xxxxxxxxxx.execute-api.us-location-x.amazonaws.com/prod/…。 (原因:CORS 标头“Access-Control-Allow-Origin”缺失)。
标签: html amazon-web-services amazon-s3 aws-lambda amazon-dynamodb