#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, если он вообще заполнен справкой.