Как вернуть вывод из лямбда-функции в web-интерфейс при поиске с помощью API

#javascript #ajax #api #aws-lambda #amazon-dynamodb

#javascript #ajax #API #aws-lambda #amazon-dynamodb

Вопрос:

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

я попытался создать функцию API POST, которая присваивает значение ключа, по которому выполняется поиск, лямбда-функции. результирующие данные из лямбда-функции затем представляются на веб-интерфейсе через API GET.

вот соответствующий Java-скрипт и html-код, а также соответствующий код из лямбда-функции.

большое, очень большое спасибо тем, кто решил помочь, я очень ценю это

HTML

 <table id='table' style="width:50%">
                <thead>
                    <tr>
                        <th>pKey</th>
                        <th>Message</th>
                        <th>Password</th>
                    </tr>
                </thead>
                <tbody id="myunipolapi">
                </tbody>
            </table>

        <form>
            <textarea id="srch" placeholder="Search Data"></textarea>
        </form>
        <div>
            <button id='searchButton'>Search</button>
        </div>

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  

Javascript ajax ПОЛУЧАЕТ

 $(document).ready(function(){
                $.ajax({
                    type: 'GET',
                    url: API_URL,

                    success: function(data){
                        $('#myunipolapi').html('');

                        data.Items.forEach(function(HeartbeatItem){
                            $('#myunipolapi').append(
                                       '<tr id="TT"><td id="TT">'   HeartbeatItem.pKey   '</td><td id="TT">'   HeartbeatItem.message   '</td><td id="TT">'   HeartbeatItem.password   '</td></tr>' 
                            );
                        })
                    }
                });
            });

  

СООБЩЕНИЕ Javascript ajax

 $('#searchButton').on('click',function() {
                $.ajax({
                    type: 'POST',
                    url: API_URL,
                    data: JSON.stringify({"search": $('#srch').val()}),
                    contentType: "application/json",

                    success: function(data){
                          $('#TT').load('#myunipolapi');
                    }
                });
            });
  

Лямбда

 console.log('starting function');
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: 'eu-west-2'});

exports.handler = function(event, ctx, callback) {

    console.log(event); 

 var queryParams = {
        TableName: 'Heartbeat',
        Key: {
            "pKey": event.search
        }
    }; 

    docClient.get(queryParams, function(err, data){
        if(err){
            callback(err, null);
        }else{
            callback(null, data);
        }
    });
};
  

API

 {
    "message": $input.json('$.message'),
    "password": $input.json('$.password'),
    "pKey": $input.json('$.pKey'),
    "search": $input.json('$.search')
}
  

Ответ №1:

Попробуйте это в вашем lambda:

  const dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10', region: 'eu-west-2'});
 const params = {
  ExpressionAttributeValues: {
   ":key": {
     S: event.search
    }
  }, 
  KeyConditionExpression: "pKey = :key", 
  TableName: "Heartbeat"
 };
 dynamodb.query(params, (err, data) => {
   if (err) console.log(err, err.stack); // an error occurred
   else     console.log(data);           // successful response
 });
  

Дополнительная информация о NodeJS AWS-SDK:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html

Комментарии:

1. к сожалению, похоже, что это не работает, спасибо вам в любом случае… я думаю, возможно, проблема может заключаться в javascript на webfront или, возможно, в том, как данные отправляются в лямбда-функцию, потому что у меня есть две кнопки, использующие один и тот же формат, за исключением того, что разные входные данные добавят копию кода, который у меня есть в API, если он вообще заполнен справкой.