【发布时间】: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