title: AWS-Lambda I get an error message " MissingRequiredParameter: Missing required key 'Data' in params" but have no 'Data' parameter called
body: <p>I am trying to use AWS-Lambda to post data throught AWS-api gateway onto a client-side web-page but I am stuck on the above error message. When run the function run the database is displayed but then gets stuck on the error message. The three sets of code pasted bellow is what I'm using. If you can help let me know also if you need more info let me know</p>
  
  <pre><code>
  database.js[
  let AWS = require("aws-sdk");
  
  //Create new DocumentClient
  let docClient = new AWS.DynamoDB.DocumentClient();
  
  //Returns all of the connection IDs
  module.exports.getConnectionIds = async() =&gt; {
      let params = {
          TableName: "WebSocketClients"
      };
      return docClient.scan(params).promise();
  };
  
  
  module.exports.getCNYData = async() =&gt; {
      let params = {
          TableName: "Currency",
          Limit: 100,
          ScanIndexForward: true,
          IndexName: "Currency_Name-Date-index",
          KeyConditionExpression: "Currency_Name = :Currency",
  
          ExpressionAttributeValues: {
              ":Currency": "CNY",
          }
  
      };
      return docClient.query(params).promise();
  };
  
  module.exports.getGBXData = async() =&gt; {
      let params = {
          TableName: "Currency",
          Limit: 100,
          ScanIndexForward: false,
          IndexName: "Currency_Name-Date-index",
          KeyConditionExpression: "Currency_Name = :Currency",
          ExpressionAttributeValues: {
              ":Currency": "GBX",
          }
      };
      return docClient.query(params).promise();
  };
  
  module.exports.getSARData = async() =&gt; {
      let params = {
          TableName: "Currency",
          Limit: 100,
          ScanIndexForward: false,
          IndexName: "Currency_Name-Date-index",
          KeyConditionExpression: "Currency_Name = :Currency",
          ExpressionAttributeValues: {
              ":Currency": "SAR",
          }
      };
      return docClient.query(params).promise();
  };
  
  module.exports.getUSDData = async() =&gt; {
      let params = {
          TableName: "Currency",
          Limit: 100,
          ScanIndexForward: false,
          IndexName: "Currency_Name-Date-index",
          KeyConditionExpression: "Currency_Name = :Currency",
          ExpressionAttributeValues: {
              ":Currency": "USD",
          }
      };
      return docClient.query(params).promise();
  };
  
  module.exports.getPositiveSentimentData = async() =&gt; {
      let params = {
          TableName: "Sentiment",
          Limit: 100,
          ScanIndexForward: false,
          IndexName: "Sentiment-Id-index",
          KeyConditionExpression: "Sentiment = :sentiment",
          ExpressionAttributeValues: {
              ":sentiment": "POSITIVE",
          }
      };
      return docClient.query(params).promise();
  };
  
  module.exports.getNegativeSentimentData = async() =&gt; {
      let params = {
          TableName: "Sentiment",
          Limit: 100,
          ScanIndexForward: false,
          IndexName: "Sentiment-Id-index",
          KeyConditionExpression: "Sentiment = :sentiment",
          ExpressionAttributeValues: {
                      ":sentiment": "NEGATIVE",
          }
      };
      return docClient.query(params).promise();
  };
  
  module.exports.getData = async() =&gt; {
      let pSentiment = await module.exports.getPositiveSentimentData();
      let nSentiment = await module.exports.getNegativeSentimentData();
      let SAR = await module.exports.getSARData();
      let CNY = await module.exports.getCNYData();
      let USD = await module.exports.getUSDData();
      let GBX = await module.exports.getGBXData();
      let data = {
          positive: pSentiment,
          negative: nSentiment,
          CNY: CNY,
          GBX: GBX,
          SAR: SAR,
          USD: USD,
      };
      return data;
  };
  
  //Deletes the specified connection ID
  module.exports.deleteConnectionId = async(connectionId) =&gt; {
      console.log("Deleting connection Id: " + connectionId);
  
      let params = {
          TableName: "WebSocketClients",
          Key: {
              ConnectionId: connectionId
          }
      };
      return docClient.delete(params).promise();
  };
  ]
  
  websocket.js[
  let AWS = require("aws-sdk");
  
  // Add ApiGatewayManagementApi to the AWS namespace
  require('aws-sdk/clients/apigatewaymanagementapi');
  
  //Import functions for database
  let db = require('database');
  
  module.exports.getSendMessagePromises = async(message, domainName, stage) =&gt; {
      //Get connection IDs of clients 
      let clientIdArray = (await db.getConnectionIds()).Items;
      console.log("\nClient IDs:\n" + JSON.stringify(clientIdArray));
  
      //Create API Gateway management class.
      const apigwManagementApi = new AWS.ApiGatewayManagementApi({
          apiVersion: '2018-11-29',
          endpoint: domainName + '/' + stage
      });
  
      //Try to send message to connected clients
      let msgPromiseArray = clientIdArray.map(async item =&gt; {
          try {
  
              console.log("Sending message '" + message + "' to: " + item.ConnectionId);
  
  
  
              //Create parameters for API Gateway
  
              let apiMsg = {
  
                  ConnectionId: item.ConnectionId,
  
                  Data: JSON.stringify(await db.getData)
  
              };
  
  
  
              //Wait for API Gateway to execute and log result
  
              await apigwManagementApi.postToConnection(apiMsg).promise();
  
              console.log("Message '" + message + "' sent to: " + item.ConnectionId);
  
          }
  
          catch (err) {
  
              console.log("Failed to send message to: " + item.ConnectionId);
  
  
  
              //Delete connection ID from database
  
              if (err.statusCode == 410) {
  
                  try {
  
                      await db.deleteConnectionId(item.ConnectionId);
  
                  }
  
                  catch (err) {
  
                      console.log("ERROR deleting connectionId: " + JSON.stringify(err));
  
                      throw err;
  
                  }
  
              }
  
              else {
  
                  console.log("UNKNOWN ERROR: " + JSON.stringify(err));
  
                  throw err;
  
              }
  
          }
  
      });
      return msgPromiseArray;
  };
  
  ]
  
  
  index.js[
  //Import external library with websocket functions
  let ws = require("websocket");
  let db = require("database");
  
  //Hard coded domain name and stage - use when pushing messages from server to client
  let domainName = "*********";
  let stage = "dev";
  
  exports.handler = async (event) =&gt; {
      try {
          //Get Message from event
          const msg = JSON.stringify(await db.getData(), function(key, value){
              if (typeof value === "bigint") {
                  return value.toString();
              } else {
                  return value;
              }
          });
  
  
          //Allocate domain name and stage dynamically
          //domainName = event.requestContext.domainName;
          //stage = event.requestContext.stage;
          console.log("Domain: " + domainName + " stage: " + stage);
  
          //Get promises message to connected clients
          let sendMsgPromises = await ws.getSendMessagePromises(msg, domainName, stage); 
  
          //Execute promises
          await Promise.all(sendMsgPromises);
      }
      catch(err){
          return { statusCode: 500, body: "Error: " + (err)};
      }
  
      //Success
      return { statusCode: 200, body: "Data sent successfully." };
  };
  ]
  </code></pre>
  
  <p>Edit:
  For the two Dynamodb tables:
  Name:Currency
  Primary Partition Key: Date(String),
  Primary Sort Key: Currency_Name(String),
  Field: Price(BigInt),
  Index: Currency_Name-Date-index.</p>
  
  <p>Second table:
  Name: Sentiment
  Primary Partition Key: Id(Number),
  Primary Sort Key: Text(String),
  Field: Sentiment(string),
  Index: Sentiment-Id-index.</p>
  
  <p>Error Message:</p>
  
  <pre><code>Response:
  {
    "statusCode": 500,
    "body": "Error: MissingRequiredParameter: Missing required key 'Data' in params"
  }
  
  Request ID:
  "e2fee9cd-4af1-489e-8aac-98e16139dd4d"
  
  Function Logs:
  019-10-23"},{"Currency_Name":"USD","Price":"48.50","Date":"2019-10-22"},{"Currency_Name":"USD","Price":"47.32","Date":"2019-10-21"},{"Currency_Name":"USD","Price":"47.48","Date":"2019-10-18"},{"Currency_Name":"USD","Price":"48.69","Date":"2019-10-17"},{"Currency_Name":"USD","Price":"48.25","Date":"2019-10-16"},{"Currency_Name":"USD","Price":"47.00","Date":"2019-10-15"},{"Currency_Name":"USD","Price":"46.49","Date":"2019-10-14"},{"Currency_Name":"USD","Price":"46.10","Date":"2019-10-11"},{"Currency_Name":"USD","Price":"43.81","Date":"2019-10-10"},{"Currency_Name":"USD","Price":"43.65","Date":"2019-10-09"},{"Currency_Name":"USD","Price":"44.10","Date":"2019-10-08"},{"Currency_Name":"USD","Price":"45.66","Date":"2019-10-07"},{"Currency_Name":"USD","Price":"44.91","Date":"2019-10-04"},{"Currency_Name":"USD","Price":"42.70","Date":"2019-10-03"},{"Currency_Name":"USD","Price":"43.50","Date":"2019-10-02"},{"Currency_Name":"USD","Price":"45.50","Date":"2019-10-01"},{"Currency_Name":"USD","Price":"44.62","Date":"2019-09-30"},{"Currency_Name":"USD","Price":"45.67","Date":"2019-09-27"},{"Currency_Name":"USD","Price":"46.22","Date":"2019-09-26"},{"Currency_Name":"USD","Price":"44.42","Date":"2019-09-25"},{"Currency_Name":"USD","Price":"47.33","Date":"2019-09-24"},{"Currency_Name":"USD","Price":"45.83","Date":"2019-09-23"},{"Currency_Name":"USD","Price":"47.89","Date":"2019-09-20"},{"Currency_Name":"USD","Price":"48.23","Date":"2019-09-19"},{"Currency_Name":"USD","Price":"48.04","Date":"2019-09-18"},{"Currency_Name":"USD","Price":"47.77","Date":"2019-09-17"},{"Currency_Name":"USD","Price":"47.53","Date":"2019-09-16"},{"Currency_Name":"USD","Price":"49.21","Date":"2019-09-13"},{"Currency_Name":"USD","Price":"49.50","Date":"2019-09-12"},{"Currency_Name":"USD","Price":"47.74","Date":"2019-09-11"},{"Currency_Name":"USD","Price":"46.75","Date":"2019-09-10"},{"Currency_Name":"USD","Price":"47.19","Date":"2019-09-09"},{"Currency_Name":"USD","Price":"46.65","Date":"2019-09-06"},{"Currency_Name":"USD","Price":"45.39","Date":"2019-09-05"},{"Currency_Name":"USD","Price":"42.48","Date":"2019-09-04"},{"Currency_Name":"USD","Price":"41.79","Date":"2019-09-03"},{"Currency_Name":"USD","Price":"42.87","Date":"2019-08-30"},{"Currency_Name":"USD","Price":"41.63","Date":"2019-08-29"},{"Currency_Name":"USD","Price":"39.61","Date":"2019-08-28"},{"Currency_Name":"USD","Price":"40.72","Date":"2019-08-27"},{"Currency_Name":"USD","Price":"40.47","Date":"2019-08-26"},{"Currency_Name":"USD","Price":"42.07","Date":"2019-08-23"},{"Currency_Name":"USD","Price":"43.45","Date":"2019-08-22"},{"Currency_Name":"USD","Price":"43.25","Date":"2019-08-21"},{"Currency_Name":"USD","Price":"42.95","Date":"2019-08-20"},{"Currency_Name":"USD","Price":"43.53","Date":"2019-08-19"},{"Currency_Name":"USD","Price":"40.19","Date":"2019-08-16"},{"Currency_Name":"USD","Price":"39.77","Date":"2019-08-15"},{"Currency_Name":"USD","Price":"40.90","Date":"2019-08-14"},{"Currency_Name":"USD","Price":"39.55","Date":"2019-08-13"},{"Currency_Name":"USD","Price":"39.85","Date":"2019-08-12"},{"Currency_Name":"USD","Price":"41.25","Date":"2019-08-09"}],"Count":100,"ScannedCount":100,"LastEvaluatedKey":{"Currency_Name":"USD","Date":"2019-08-09"}}}' to: KYSQycomoAMCJdA=
  2020-04-03T14:09:16.092Z    e2fee9cd-4af1-489e-8aac-98e16139dd4d    INFO    Sending message '{"positive":{"Items":[{"Sentiment":"POSITIVE","Id":"1238393433607131100n","Text":"\"Nice, didn’t get boated  *********""}],"Count":1,"ScannedCount":1},"negative":{"Items":[{"Sentiment":"NEGATIVE","Id":"1238395098741825500n","Text":"\"RT @keira_churchill: GBP plummets against the Euro because coronavirus. GBP plummets against the USD because coronavirus. GBP plummets agai…\""},{"Sentiment":"NEGATIVE","Id":"1238392914813816800n","Text":"\"@keira_churchill GBP was already weakened by Brexit uncertainty/risks. Add CoronavEND RequestId: e2fee9cd-4af1-489e-8aac-98e16139dd4d
  </code></pre>