【问题标题】:AWS Lambda Error: Validation Exception Value [] at 'names' failed to satisfy constraint: Member must have a length greater than or equal to 1AWS Lambda 错误:“名称”处的验证异常值 [] 未能满足约束:成员的长度必须大于或等于 1
【发布时间】:2021-10-03 15:15:29
【问题描述】:

我有一个由 AWS SNS 主题触发的 lambda 函数。该函数获取从 SNS 事件传入的信息,并使用 Nodemailer 向用户发送电子邮件。

当我在本地运行我的 lambda 函数时,它可以正常工作。但是一旦部署,我的 CloudWatch 日志中就会出现以下错误:

ValidationException: 1 validation error detected: Value '[]' at 'names' failed to satisfy constraint: Member must have length greater than or equal to 1.
    at Request.extractError (/var/task/node_modules/aws-sdk/lib/protocol/json.js:52:27)
    at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
    at Request.emit (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
    at Request.emit (/var/task/node_modules/aws-sdk/lib/request.js:688:14)
    at Request.transition (/var/task/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.runTo (/var/task/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at /var/task/node_modules/aws-sdk/lib/state_machine.js:26:10
    at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:38:9)
    at Request.<anonymous> (/var/task/node_modules/aws-sdk/lib/request.js:690:12)
    at Request.callListeners (/var/task/node_modules/aws-sdk/lib/sequential_executor.js:116:18) {
  code: 'ValidationException',
  time: 2021-10-01T18:02:30.538Z,
  requestId: '023d6346-a49a-4dc6-a07f-92bd578a3601',
  statusCode: 400,
  retryable: false,
  retryDelay: 94.04142545650443
} 

这是我的 lambda 函数的代码:

const pug = require('pug');
const {newTransporter} = require('./handlers/emailTransporter');

exports.handler = async (event, context) => {
    const message = event.Records[0].Sns.Message;

    const mailAddressObj = {
        'userEmail' : message.mail.commonHeaders.replyTo,
        'clientEmail' : message.mail.commonHeaders.to[0],
    }
    const {userEmail, clientEmail} = mailAddressObj;
    const html = pug.compileFile('./views/bounceNotificationEmail.pug');
    const mailOptions = {
        from: 'sendingEmail@email.com',
        to: 'clientEmail,
        subject: `Subject Header`,
        html: html({
            client_email: clientEmail
        }),
      };

    try {
        let transporter = await newTransporter();
        let info = await transporter.sendMail(mailOptions);
        console.log("Message sent: %s", info.messageId);
        return info;
    }
    catch (e) {
        console.log(e, 'error')
    }

    return console.log(mailAddressObj);
};

【问题讨论】:

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


    【解决方案1】:

    对于您示例中的初学者,您不会在“to”参数之后关闭引号:P

    然而,更严肃的一点是,我认为当您在本地运行它时,您编写了一个手动触发 lambda 的 JSON 事件,它与 SNS 生成的真实事件的形状不同。在您的特定情况下,您在函数的第一行初始化的 message 实际上是一个字符串,但您将其用作对象。

    你应该做的是

    const message = JSON.parse(event.Records[0].Sns.Message);
    

    【讨论】:

      猜你喜欢
      • 2022-07-07
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 2020-06-10
      • 2021-12-01
      相关资源
      最近更新 更多