Невозможно вернуть что-либо из службы покоя node.js - PullRequest
0 голосов
/ 04 июля 2018

Я знаю, что это недостаток в моих знаниях, но я не могу решить это. Я провел последние пару часов, просматривая и пробуя варианты, но не могу понять, что не так.

Я написал успешный фрагмент файла node.js, который при запуске из командной строки возвращает таблицу в форме JSON из локальной AWS DynamoDB.

Я сейчас пытаюсь превратить это в лямда-звонок. И там, где это идет не так. Я не могу заставить лямду вернуть что-либо, и я не знаю почему. Я почти уверен, что это потому, что я не понимаю, как работает механизм обратного вызова, но читаю, что это не помогло и не позволило мне наткнуться на ответ.

Вот код, который я получил:

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 голосов
/ 11 июля 2018

Оказывается, это была ошибка соединения. Может показаться, что экземпляр SAM-Local не может подключиться к локальному экземпляру DynamoDB.

Сейчас я смотрю, как я получаю доступ SAM-Local к локальной машине (кажется, что он не может видеть снаружи своего контейнера).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...