#node.js #amazon-web-services #aws-lambda #amazon-dynamodb
#node.js #amazon-веб-сервисы #aws-lambda #amazon-dynamodb
Вопрос:
Вот моя функция 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}nn 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);
});
};
Комментарии:
1. Вы запустили событие вручную, не так ли?
2. Да, ммм, я сделал
3. Из-за этого ваш
event
файл еще не содержит ниRecords
одного, чтоevent.Records[0]
приведет кundefined
. Вы должны попробовать заглушить полезную нагрузку события, которая содержитсяRecords
при запуске события.4. Я не понял………….
5. Как я могу это решить
Ответ №1:
Похоже, что ваш код представляет собой функцию AWS Lambda.
При вызове лямбда-функции информация передается функции через event
параметр. Информация, передаваемая через event
, варьируется в зависимости от того, как была запущена функция. Например, если функция запускается событием Amazon S3, то S3 предоставляет информацию в event
параметре, который описывает объект, вызвавший запуск события.
Однако, если вы запускаете это событие «вручную», то Amazon S3 не задействован, и event
параметр содержит только ту информацию, которую вы предоставили при вызове функции.
Если вы тестируете функцию в консоли управления AWS Lambda, вы можете указать event
параметр «Настроить тест». Событие, предусмотренное в этой конфигурации, затем будет передано тестируемой функции.
Комментарии:
1. Я предоставил событие с помощью теста Configure . Но появилась другая ошибка… Не удается прочитать свойство ‘S’ неопределенного
2. docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…