Как передать строку JSON в функцию AWS Lambda с веб-страницы Javascript без каких-либо вызовов API? - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь отправить данные, введенные в различные поля формы HTML на веб-странице в виде строки JSON, в AWS Lambda, чтобы Lambda могла ввести их в таблицу DynamoDB. Так как это для проекта класса, я решил отказаться от использования API шлюза, я просто хочу вызвать функцию Lambda из javascript веб-страницы и передать JSON в качестве параметра функции Lambda. У меня есть веб-страница, успешно вызывающая функцию Lambda, которую я жестко запрограммировал для ввода предварительно определенной записи в таблицу «Динамо». У меня также есть web js, создающий строку JSON из формы. Моя цель - отправить строку JSON в качестве параметра функции Lambda при ее вызове, но я не уверен, как мне это сделать, поскольку я впервые работаю с AWS. Я знаю, что должен что-то сделать с параметром полезной нагрузки, но не могу найти четкого примера того, что именно. Я убедился, что у меня есть правильные учетные данные и импорт SDK в HTML. Ниже мой код:

Веб-страница JS:


var lambda = new AWS.Lambda();


function makeJSON(){
  var userID = "";
  var name = document.forms["characterForm"]["characterName"].value;
  //alert(name);
  //alert(typeof name);
  var race = document.forms["characterForm"]["race"].value;
  var playerClass = document.forms["characterForm"]["class"].value;
  var strength = document.forms["characterForm"]["strength"].value;
  var dexterity = document.forms["characterForm"]["dexterity"].value;
  var constitution = document.forms["characterForm"]["constitution"].value;
  var intelligence = document.forms["characterForm"]["intelligence"].value;
  var wisdom = document.forms["characterForm"]["wisdom"].value;
  var charisma = document.forms["characterForm"]["charisma"].value;


  //alert(name + race + playerClass + strength, dexterity, constitution, intelligence, wisdom, charisma);

  characterSheetObj = {userID: userID, name: name, race: race, class: playerClass, strength: strength, dexterity: dexterity, constitution: constitution, intelligence: intelligence, wisdom: wisdom, charisma: charisma}
  characterSheetJSON = JSON.stringify(characterSheetObj);

  var myParams = {
    FunctionName : 'addCharacterSheet',
    InvocationType : 'RequestResponse',
    LogType : 'None',
    //Payload : {"userID": userID, "name": name, "race": race, "class": playerClass, "strength": strength, "dexterity": dexterity, "constitution": constitution, "intelligence": intelligence, "wisdom": wisdom, "charisma" : charisma}
  }

  lambda.invoke(myParams, function(err, data){
      //if it errors, prompts an error message
      if (err) {
              alert("Error");
              prompt(err);
           }
           //otherwise puts up a message that it didnt error. the lambda function presently doesnt do anything
           //in the future the lambda function should produce a json file for the JavaScript here to do something with
           else {
              alert("Invoked Lambda function without erroring!");
           }
    });

}

Узел Лямбда-функция:

const AWS = require('aws-sdk');
const db = new AWS.DynamoDB.DocumentClient({region: 'us-east-1'});
  exports.handler = async (event) => {
//  exports.handler = function(e, ctx, callback) { 

    let scanningParameters = {
        TableName : 'characterTable',
        Limit:100
    };

    db.scan(scanningParameters, function(err, data){
        if(err){
            callback(err,null);
        }else{
            callback(null,data);
        }
    });

    const params = {
        TableName : 'characterTable',
        Item: {
            name : 'Alan'
        }

        };

        const userID = '12345';
        params.Item.userID = userID;

      return await db.put(params).promise();
    };

//}

Я думаю, что это связано с events.body в Узле. JS код, но, опять же, я не очень ясен по этому поводу, и я не могу много узнать из документации Amazon. Буду очень признателен за любые предложения, советы или ресурсы!

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Не знаю, правильно ли я понимаю ваш вопрос, но ваши параметры, переданные в AWS Lambda, доступны по адресу event.arguments

0 голосов
/ 12 ноября 2019

Просто передайте полезную нагрузку в виде строки JSON:

var payload_obj = { name: "John", age: 30, city: "New York" };
var payload_json = JSON.stringify(payload_obj);

var myParams = {
    FunctionName : 'addCharacterSheet',
    InvocationType : 'RequestResponse',
    LogType : 'None',
    Payload : payload
  }

lambda.invoke(myParams, function(err, data){
      ...
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...