【问题标题】:AWS Lambda: "Cannot read property '0' of undefined"AWS Lambda:“无法读取未定义的属性‘0’”
【发布时间】:2020-11-11 05:20:10
【问题描述】:

这是我的 AWS Lambda 函数。但是,运行它时,我得到Cannot read property '0' of undefined

const AWS = require('aws-sdk');
const SES = new AWS.SES();

const FROM_EMAIL_ADDRESS = process.env.FROM_EMAIL_ADDRESS;
const TO_EMAIL_ADDRESS = process.env.TO_EMAIL_ADDRESS;

function sendEmailToMe(formData) {

    const emailParams = {
        Source: FROM_EMAIL_ADDRESS, 
        ReplyToAddresses: ['keshijemi478@gmail.com'],
        Destination: {
          ToAddresses: [TO_EMAIL_ADDRESS], 
        },
        Message: {
          Body: {
            Text: {
              Charset: 'UTF-8',
              Data: `Thanks for subscribe: ${formData.message}\n\n Name: ${formData.name}\n Email: ${formData.email}\n I will reply as soon as possible`,
            },
          },
          Subject: {
            Charset: 'UTF-8',
            Data: 'New message from your_site.com',
          },
        },
    };

    console.log(emailParams);

    const promise =  SES.sendEmail(emailParams).promise();
    console.log(promise);
    return promise;
}


exports.handler = async(event) => {
    console.log('SendEmail called');

  
   const dynamodb = event.Records[0].dynamodb;
    console.log(dynamodb);

    const formData = {
        name : dynamodb.NewImage.name.S,
        message : dynamodb.NewImage.message.S,
        email : dynamodb.NewImage.email.S
    };
    console.log(formData);

    return sendEmailToMe(formData).then(data => {
        console.log(data);
    }).catch(error => {
        console.log(error);
    });
};

【问题讨论】:

  • 你手动触发了事件,不是吗?
  • 是的,嗯,我做到了
  • 因此,您的event 尚不包含任何Records,因此event.Records[0] 将生成undefined。您应该尝试在触发事件时存根事件有效负载,其中包含Records
  • 我不明白......
  • 我该如何解决这个问题

标签: node.js amazon-web-services aws-lambda amazon-dynamodb


【解决方案1】:

您的代码似乎是 AWS Lambda 函数。

调用 Lambda 函数时,信息会通过 event 参数传递给函数。通过event 传递的信息取决于如何函数被触发。例如,如果函数由 Amazon S3 事件触发,则 S3 在 event 参数中提供信息,描述导致事件被触发的对象。

但是,如果您“手动”触发此事件,则不涉及 Amazon S3,event 参数仅包含您在调用该函数时提供的信息。

如果您在 AWS Lambda 管理控制台中测试该函数,您可以通过“配置测试”选项提供 event。此配置中提供的事件随后将传递给正在测试的函数。

【讨论】:

猜你喜欢
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多