我知道这是我的知识的失败,但我无法解决。在过去的两个小时中,我已经浏览并尝试了变体形式,但是我无法弄清楚出了什么问题。
我编写了成功的node.js,当从命令行运行时,它会从本地AWS DynamoDB以JSON形式返回一个表。
我现在正试图将其转换为lamda电话。还有哪里出错了。我无法获得返回任何东西的结果,而且我也不知道为什么。我很确定这是因为我不了解回调机制的工作原理,但仔细阅读该内容无济于事,也无法让我迷失答案。
这是我得到的代码:
var AWS = require("aws-sdk");
exports.handler = (event, context, callback) => {
let id = (event.pathParameters || {}).division || false;
switch(event.httpMethod){
case "GET":
if(id) {
//callback(null, {body: "Returning Divison " + id});
AWS.config.update({
region: "us-west-2",
endpoint: "http://localhost:8000"
});
var docClient = new AWS.DynamoDB.DocumentClient()
var table = 'League';
var params = {
TableName : table,
KeyConditionExpression: "#division = :division",
ExpressionAttributeNames: {
"#division": "division"
},
ExpressionAttributeValues: {
":division": id
}
};
docClient.query(params, function(err, data) {
if (err)
{
//console.error("Unable to read item. Error JSON:", JSON.stringify(err, null, 2));
callback(err, null);
}
else
{
//console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
callback(null, JSON.stringify(data.Item));
}
})
break;
}
callback(null, {body: "Return all divisions"});
break;
default:
// Send HTTP 501: Not Implemented
console.log("Error: unsupported HTTP method (" + event.httpMethod + ")");
callback(null, { statusCode: 501 })
}
}
如果我注释掉docClient.query
调用,它将起作用并将内容返回到浏览器(不过只是一行消息)。当包含它失败时,我从SAM收到以下消息:
Function 'TableGetTest' timed out after 3 seconds
Function returned an invalid response (must include one of: body, headers or statusCode in the response object). Response received: b''
任何帮助或指针将不胜感激。
答案 0 :(得分:0)
原来是连接错误。看来SAM-Local实例无法连接到dynamoDB的本地实例。
我现在正在研究如何获得对本地计算机的SAM-Local访问(似乎无法在其容器外部看到)。