无法从node.js rest服务返回任何内容

时间:2018-07-04 15:38:50

标签: node.js amazon-web-services aws-lambda

我知道这是我的知识的失败,但我无法解决。在过去的两个小时中,我已经浏览并尝试了变体形式,但是我无法弄清楚出了什么问题。

我编写了成功的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''

任何帮助或指针将不胜感激。

1 个答案:

答案 0 :(得分:0)

原来是连接错误。看来SAM-Local实例无法连接到dynamoDB的本地实例。

我现在正在研究如何获得对本地计算机的SAM-Local访问(似乎无法在其容器外部看到)。