Как вернуть вывод из лямбда-функции в веб-фронт при поиске с использованием API - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь настроить панель поиска на моем веб-фронте, которая позволит пользователю искать данные в моей таблице 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 GET

$(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 POST

$('#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 Ответ

2 голосов
/ 25 марта 2019

Попробуйте это в своей лямбде:

 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

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