【问题标题】:Sendgrid and AWS Lambda Serverless FormSendgrid 和 AWS Lambda 无服务器表单
【发布时间】:2018-09-04 20:45:06
【问题描述】:

我正在尝试使用 Sendgrid 和 AWS Lambda 设置一个超级基本的电子邮件表单。我在将数据从表单发送到 Lambda 函数时遇到问题。我得到的错误是“位置 0 的 JSON 中的意外令牌 u”。我知道这与我如何发送尸体有关。下面是我的 Lambda 函数代码。

require("dotenv").config();
const sendgrid = require('@sendgrid/mail');

exports.handler = (event, context, callback) => {
sendgrid.setApiKey(process.env.SENDGRID_API_KEY);
var data = JSON.parse(event.body);
const msg = {
    to: data.to,
    from: 'test@gmail.com',
    subject: data.subject,
    text: data.message,
};
sendgrid.send(msg);
callback(null, 'Message Sent');
}

这是我的表单的 Javascript。

$(document).ready(function() {

$("#submit").click(function(e) {
    e.preventDefault();

    var to = $("#to").val();
    var subject = $("#subject").val();
    var message = $("#message").val();

    var data = {
        'to': to,
        'subject': subject,
        'message': message
    }

    $.ajax({
        type: "POST",
        url: 'https://xxxxxxxx.execute-api.us-east-1.amazonaws.com/prod/xxxxx',
        contentType: 'application/json',
        data: JSON.stringify({data}),
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        },
        success: function(res){
            console.log('Email was sent.');
        },
        error: function(){
            console.log('Error.');
        }
    });

})

});

谢谢!

【问题讨论】:

  • 尝试在 "data" 对象中为你的数据加上引号:data = { "to": "\"" + to + "\"", ......} 看看是否这有帮助。
  • 在 ajax 设置之外执行 JSON.stringify,这样您就可以 console.log 结果并确保您知道正在发送什么。如果它看起来像 OK JSON(或者在字符串化时根本不抛出异常),那么您的问题出在 lambda 方面。检查以确保 event.body 确实存在,console.log 进行检查。您遇到的特定 JSON 解析错误通常表明您正在尝试解析未定义的值。

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


【解决方案1】:

问题是您正在尝试解析 JSON 对象,而不是字符串。

var 数据 = JSON.parse(event.body);

这是不正确的。只需分配,

var data = event.body;

它应该从那里小心。

希望对你有帮助。

【讨论】:

  • Lambda 不会自动解析 JSON 正文,所以这不应该是这里的问题。 event.body 实际上未定义的可能性更大
  • JSON 中的意外标记 u 在位置 0 。当您尝试解析 JSON 对象甚至未定义时会发生此错误。您尝试打印 console.log(event.body) 以检查值。
猜你喜欢
  • 2021-06-21
  • 2019-01-21
  • 2018-03-19
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 2021-06-03
相关资源
最近更新 更多