【问题标题】:AWS Lambda Function To DynamoDB - Sending Map And SS AttributesAWS Lambda 函数到 DynamoDB - 发送 Map 和 SS 属性
【发布时间】:2022-01-20 22:56:24
【问题描述】:

我希望通过 Postman 将 JSON 发送到 API Gateway API 端点,但在发送 MapSS 属性时遇到了困难。

我为"Created" 选择了Map,并选择"Last Modified" 来显示日期和时间。

我为列表项选择了SS,例如"Ages": ["Grade 8","Grade 9","Grade 10"].

请有人帮忙查看 Lambda 函数和 JSON,以了解如何发送数据?我对 AWS 很陌生。

这将是人们通过前端发布工作的表单。

Lambda 函数

"use strict";
require("dotenv").config();
const AWS = require("aws-sdk");
AWS.config.update({ region: "eu-west-1" });
const documentClient = new AWS.DynamoDB.DocumentClient();

const addJobListing = async (data) => {
  const body = {
    Item: {
      PK: data["Item"]["PK"],
      SK: data["Item"]["SK"],
      "Days Off": data["Item"]["Days Off"],
      "Start Date": data["Item"]["Start Date"],
      "Job ID": data["Item"]["Job ID"],
      "Contract Length": data["Item"]["Contract Length"],
      "Expiration Date": data["Item"]["Expiration Date"],
      Created: {
        date: data["Item"]["Created Date"],
        time: data["Item"]["Created Time"],
      },
      Insurance: data["Item"]["Insurance"],
      Title: data["Item"]["Title"],
      Holidays: data["Item"]["Holidays"],
      Ages: data["Item"]["Ages"], //NEEDS TO BE MAPPED
      "Flight Reimbursement": data["Item"]["Flight Reimbursement"],
      Curriculum: data["Item"]["Curriculum"], //NEEDS TO BE MAPPED
      "Account ID": data["Item"]["Account ID"],
      "Minimum Monthly Salary Before Tax":
        data["Item"]["Minimum Monthly Salary Before Tax"],
      "Housing Allowance": data["Item"]["Housing Allowance"],
      Responsibilities: data["Item"]["Responsibilities"],
      "Job Closest Metro": data["Item"]["Job Closest Metro"],
      "Job Requirements": data["Item"]["Job Requirements"],
      "Job Type": data["Item"]["Job Type"],
      "Z-VISA Reimbursement": data["Item"]["Z-VISA Reimbursement"],
      Meals: data["Item"]["Meals"],
      Subject: data["Item"]["Subject"],
      "Salary Information": data["Item"]["Salary Information"],
      "Maximum Monthly Salary Before Tax":
        data["Item"]["Maximum Monthly Salary Before Tax"],
      "Vacancy Status": data["Item"]["Vacancy Status"],
      "Contract Completion Bonus": data["Item"]["Contract Completion Bonus"],
      "Last Modified": {
        date: data["Item"]["Modified Date"],
        time: data["Item"]["Modified Time"],
      },
    },
    TableName: "XXXX",
  };

  return await documentClient
    .put(body)
    .promise()
    .then((data) => console.log(data.Attributes))
    .catch(console.error);
};

exports.handler = async (event, context, callback) => {
  console.log("EVENT BODY", event.body);
  const response = await addJobListing(JSON.parse(event.body));
  return {
    statusCode: 200,
    headers: {
      "Access-Control-Allow-Origin": "*", // Required for CORS support to work
      "Access-Control-Allow-Credentials": true, // Required for cookies, authorization headers with HTTPS
    },
    body: JSON.stringify(response),
  };
};

通过 Postman 进行 JSON 测试:

{
    "Item": {
        "PK": "ACC#1000",
        "SK": "JOBID#01.17/01/2022",
        "Days Off": "Weekends",
      "Start Date": "17/09/2022",
      "Job ID": "01",
      "Contract Length": "Two Years",
      "Expiration Date": "17/09/2022",
      "Created": {
            "date": "17/09/2022",
            "time": "00:00:00"
      },
      "Insurance": "Insurance",
      "Title": "Title Of Vacancy",
      "Holidays": "Amount of Holidays",
      "Ages": ["Grade 8","Grade 9","Grade 10"],
      "Flight Reimbursement": "Flight Reimbursement",
      "Curriculum": ["Schools Own Curriculum","International Baccalaureate","GCSE"],
      "Account ID": "10",
      "Minimum Monthly Salary Before Tax": "Minimum Monthly Salary Before Tax",
      "Housing Allowance":"Housing Allowance",
      "Responsibilities": "Responsibilities",
      "Job Closest Metro": "Job Closest Metro",
      "Job Requirements": "Job Requirements",
      "Job Type": "Job Type",
      "Z-VISA Reimbursement": "Z-VISA Reimbursement",
      "Meals": "Meals",
      "Subject": "Subject",
      "Salary Information": "Salary Information",
      "Maximum Monthly Salary Before Tax": "Maximum Monthly Salary Before Tax",
      "Vacancy Status": "Vacancy Status",
      "Contract Completion Bonus": "Contract Completion Bonus",
      "Last Modified": {
            "date": "17/09/2022",
            "time": "00:00:00"
      }
      }
}

【问题讨论】:

  • 您能否在问题中添加任何错误消息?一般来说,为了能够回答一个问题,最好把它写成“当我尝试 X 时,我期望 Y,但我看到的是 Z”

标签: amazon-web-services aws-lambda amazon-dynamodb aws-api-gateway dynamodb-queries


【解决方案1】:

最初的问题:

问题在于 "Created"/"Last Modified" 键/值对。

例如,这不起作用,因为它引用了 DynamoDB 表中不存在的 "Created Date""Created Time" 列:

  Created: {
    date: data["Item"]["Created Date"],
    time: data["Item"]["Created Time"],
  },

解决方案:

相反,"Created"/"Last Modified" 应该是这样的:

  Created: data["Item"]["Created"],
  "Last Modified": data["Item"]["Last Modified"],

“已创建”现在也可以更改为字符串,或者在 JSON 中传入修改后的地图属性:

"Created": "2014-09-12T19:34:29Z",

提示: 在使用 DynamoDB 时,可以添加一个项目并单击 JSON 以查看它作为 JSON 项目的外观。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2018-08-29
    相关资源
    最近更新 更多