【问题标题】:AWS lambda contact us page issueAWS lambda 联系我们页面问题
【发布时间】:2020-10-18 08:47:21
【问题描述】:

(AWS 中的 NOOB。) 以下是我的联系我们页面中的我的 .js 代码:名称、电子邮件和描述是电子邮件正文所需的三个字段。

function submitToAPI(e) {
   e.preventDefault();
   var name = document.getElementById("name-input").value;
   var email = document.getElementById("email-input").value;
   var desc = document.getElementById("description-input").value;
   
   
    if (name=="" || email=="" || desc=="")
    {
        alert("Please Fill All Required Field");
        return false;
    }
        var Name_n = /[A-Za-z]{1}[A-Za-z]/;
        if (!Name_n.test($("name").val())) {
        alert ("Not a valid name");
        return;
        }
        
    if ($("email").val()=="") 
    {
            alert ("Please enter your email id");
            return;
    }

        
    var Email_E = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,6})?$/;
    if (!Email_E.test($("email").val())) 
    {
        alert ("Please enter valid email address");
        return;
    } 
    
   var data = {
      name : name,
      email : email,
      desc : desc
    };

     $.ajax({
     type: "POST",
     url : "*AMAZON API Gateway URL*",
     dataType: "json",
     crossDomain: "true",
     contentType: "application/json; charset=utf-8",
     data: JSON.stringify(data),
     
     success: function () {
       // clear form and show a success message
       alert("Thank you for your message. I will get back to you at the earliest");
       document.getElementById("reused_form").reset();
       location.reload();
     },
     error: function () {
       // show an error message
       alert("Failed to contact backend.");
     }});
  
} 

Lambda 函数:

var AWS = require('aws-sdk');
var ses = new AWS.SES();
 
var RECEIVER = 'test@test.com';
var SENDER = 'test@test.com';

var response = {
 "isBase64Encoded": false,
 "headers": { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*'},
 "statusCode": 200,
 "body": "{\"result\": \"Success.\"}"
 };

exports.handler = function (event, context) {
    console.log('Received event:', event);
    console.log('Received name:', event.name);
    console.log('Received name:', event.email);
    console.log('Received name:', event.desc);
    sendEmail(event, function (err, data) {
        context.done(err, null);
    });
};
 

function sendEmail (event, done) {
    var params = {
        Destination: {
            ToAddresses: [
                RECEIVER
            ]
        },
        Message: {
            Body: {
                Text: {
                    Data: 'name: ' + event.name + '\nemail: ' + event.email + '\ndesc: ' + event.desc,
                    Charset: 'UTF-8'
                }
            },
            Subject: {
                Data: 'Test subject: ' + event.name,
                Charset: 'UTF-8'
            }
        },
        Source: SENDER
    };
    ses.sendEmail(params, done);
}

日志:

2020-10-17T22:40:15.618Z    d0d4615b-8d2a-4406-a71b-031bac89724b    INFO    

Received event: {



version: '2.0',
  routeKey: 'POST /contactus',
  rawPath: '/prod/contactus',
  rawQueryString: '',
  headers: {
    accept: 'application/json, text/javascript, */*; q=0.01',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'en-GB,en;q=0.9,en-US;q=0.8,hi;q=0.7',
    'content-length': '77',
    'content-type': 'application/json; charset=UTF-8',
    host: 'host',
    origin: 'http://url',
    referer: 'http://url',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'cross-site',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
    'x-amzn-trace-id': 'Root=1-5f8b72cf-3d5e0c457647314914a429d6',
    'x-forwarded-for': 'ip',
    'x-forwarded-port': '443',
    'x-forwarded-proto': 'https'
  },



requestContext: {
    accountId: '509405368663',
    apiId: '0j2y9oea5i',
    domainName: 'host',
    domainPrefix: '0j2y9oea5i',
    http: {
      method: 'POST',
      path: '/prod/contactus',
      protocol: 'HTTP/1.1',
      sourceIp: 'ip',
      userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'
    },
    requestId: 'Uk7gXi6IFiAEPBw=',
    routeKey: 'POST /contactus',
    stage: 'prod',
    time: '17/Oct/2020:22:40:15 +0000',
    timeEpoch: 1602974415086
  },
  body: '{"name":"Test","email":"test@gmail.com","desc":"Test message from HTML Form"}',
  isBase64Encoded: false
}

名称的控制台日志

2020-10-17T22:40:15.619Z    d0d4615b-8d2a-4406-a71b-031bac89724b    INFO    

Received name: undefined

问题:

我收到一封来自 Amazon SES 的电子邮件,但名称、电子邮件和描述被设置为“未定义”。

【问题讨论】:

  • 您的 Lambda 函数记录 event。它包含什么?
  • @jarmod - 已更新日志。它对 console.log('Received name:', event.name) 说“未定义”;
  • 这就是为什么我要求事件,而不是 event.name。
  • 我也添加了事件日志。请参阅日志下的“收到的事件”

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


【解决方案1】:

发送的有效载荷在event.body 内,但它是一个字符串。使用let data = JSON.parse(event.body) 将其转换为对象,然后您将可以访问nameemaildesc 属性与点符号(例如data.name

【讨论】:

  • 我应该在哪里定义 let data = JSON.parse(event.body); ,上面的exports.handler?
  • 我试图在exports.handler 中添加json.parse(event.body) 但得到错误- JSON.parse ()"
  • 将其添加到您的exports.handler:`exports.handler = function (event, context) { let data = JSON.parse(event.body); console.log('收到事件:', event); console.log('收到的名字:', data.name); console.log('收到的名字:', data.email); console.log('收到的名字:', data.desc); sendEmail(数据,函数(错误){ context.done(错误,空);}); }; `
  • 已经尝试过了,当我尝试使用测试用例对其进行测试时,Lambda 函数会出错。错误调用错误 {"errorType":"SyntaxError","errorMessage":"JSON 中位置 0 的意外标记 u","stack":["SyntaxError: JSON 中位置 0 的意外标记 u"," 在 JSON.parse ()","
  • 哦,哇,即使 Lambda 测试数据在 Parse 中出现错误,但是当我从网页上对其进行测试时,它可以工作......花了 5 个小时后......问题得到了解决。非常感谢您!!!!我仍然不明白为什么来自 AWS 的 lambda 测试用例不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多