Лямбда-функция не может получить данные из динамо-базы данных для amazon lex - нулевой ответ - PullRequest
0 голосов
/ 24 октября 2019

Я довольно плохо знаком с узлом и столкнулся с проблемой, пытаясь выполнить простой тест интеграции AWS с лямбда-динамо в БД, чтобы получить ответ на запрос Amazon Lex. Если кто-то может сказать, что нужно изменить, это будет высоко ценится. спасибо ..

Runtime - узел js 10.x, а также попытка на узле js 8.10. Ниже приведен пример кода JS узла:

const AWS = require('aws-sdk');

var DBHandler = require("./DBHandler")

exports.handler = async (event) => {

    console.log('This event is' +JSON.stringify(event))

    var intent = event.currentIntent.name;

    DBHandler.getalldetails(intent , function (err , data ) {
        if (err) {
            context.fail(err);
        } else {
            var response = {
            "dialogAction": {
            "type": "Close",
            "fulfillmentState": "Fulfilled",
            "message": {
                "contentType": "PlainText",
                "content": "data.Item.Message."
            } 
          }
        }

    return response
    //callback ( null, response );
        }
    });
};

Ниже приведен ./DBHandler в другомфайл в той же папке функций lamdba.

const AWS = require('aws-sdk');

AWS.config.update({
    region:"eu-west"
});

var docClient = new AWS.DynamoDB.DocumentClient();

var tableName = "testholly";
//exports.handler = (event,context,callback) => {

var getalldetails = (Intent,callback) => {

    var params = {
        TableName : tableName,
        Key: {
            "Intent":Intent
        }
    };
    docClient.get(params,function (err,data) {
        callback (err , data);
    });
};module.exports = {
    getalldetails
};

1 Ответ

0 голосов
/ 24 октября 2019

Ваш ответ не входит в ваш обратный вызов от getAllDetails() .... так и должно быть. Итак, что-то вроде:

exports.handler = async (event, context, callback) => {

    console.log('This event is' + JSON.stringify(event))

    var intent = event.currentIntent.name;

    DBHandler.getalldetails(intent, function (err, data) {
        if (err) {
            context.fail(err);
        } else {
            var response = {
                "dialogAction": {
                    "type": "Close",
                    "fulfillmentState": "Fulfilled",
                    "message": {
                        "contentType": "PlainText",
                        "content": data.Item.Message
                    }
                }
            }
            callback(null, response)
        }
    });
};

Вы не можете использовать await с обратными вызовами, вам нужно «пообещать» этому плохому парню. Выше я передаю обратный вызов обработчику.

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