首页 > 解决方案 > 如何将网页中的js参数发送到aws lambda中的节点函数?

问题描述

我正在尝试将从网页中的字段创建的 json 文件发送到 AWS Lambda 中的节点函数,以将其添加到 DynamoDB 表中。我制作了 JSON,但我不知道如何将它从用于页面的 js 传递给 lambda 函数。由于这是一个班级项目,我和我的团队决定放弃亚马逊的网关 API,而只是使用亚马逊的 js sdk 原始调用 lambda 函数。我检查了亚马逊的文档和其他各种示例,但我无法找到完整的解决方案。

lambda中的节点函数

const AWS = require('aws-sdk');
const db = new AWS.DynamoDB.DocumentClient({region: 'us-east-1'});

exports.handler = async (event) => {

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

   };

    const userID = 'placeholder';
    params.Item.userID = userID;
    return await db.put(params).promise();

    };

//}

网页js:


var lambda = new AWS.Lambda();


function makeJSON(){
  var userID = "";
  var name = document.forms["characterForm"]["characterName"].value;

  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;


  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);

  alert(characterSheetJSON);

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

  lambda.invoke(myParams, function(err, data){
    //if it errors, prompts an error message
    if (err) {
            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("Did not error");
         }
  });



}


原始 javascript 的 html 页面包括导入 sdk 和配置区域/用户池的正确设置

我只是不知道如何从我的节点函数中的调用中获取有效负载,因为这是我第一次使用 lambda 和 amazon 的 sdk,或者说完全没有做任何 Web 开发工作,老实说。

标签: javascriptnode.jsaws-lambda

解决方案


我会用异步等待来做。最好阅读。

lambda.invoke = util.promisify(lambda.invoke);
const result = await lambda.invoke(yourParams);
const payload = JSON.parse(result.Payload);

推荐阅读