javascript - 尝试使用 sendgrid 发送电子邮件时出现错误
问题描述
我收到一个错误,我相信它是从 sendgrid 返回的。但是,我在 Twilio/Sendgrid 故障排除文档中找不到此错误。我看到一些对它的引用表明这是版本不匹配的问题。事情是这样的,我对这个项目知之甚少。开发人员不久前离开了。我一直在努力提供帮助,并且相当成功。然而,这个让我难住了。该错误不涉及任何行号或模块(我可以告诉)
这是来自试图发送此电子邮件的云功能的 Firebase 控制台日志:
{
insertId: "000000-55176214-acd2-453d-8258-048000f1e9e3"
labels: {…}
logName: "projects/wsos-base/logs/cloudfunctions.googleapis.com%2Fcloud-functions"
receiveTimestamp: "2019-06-21T16:40:19.541487656Z"
resource: {…}
severity: "ERROR"
textPayload: "TypeError: Object.values is not a function"
timestamp: "2019-06-21T16:40:13.253Z"
trace: "projects/wsos-base/traces/bdb710bad4f92297c239de4409de2323"
}
sendgrid.send 调用之前的控制台日志消息显示在日志中。此调用后没有显示任何日志消息。我已经注释掉了整个调用,并且日志文件中没有显示错误。我几乎 100% 肯定这发生在通话中。但是,从查找 sendgrid 的内容来看,我应该期望至少有一个错误号作为响应。我通过替换字符串错误消息确认“catch”正在工作。我确实在日志中看到了该错误消息。当我将其放回原始捕获时,我收到报告的“TypeError ...Object.values ...”消息。没有错误信息。没有行号。没有模块。
return admin.auth().getUser(user)
.then(mentorObj => {
var mentorEmail = mentorObj.email;
var menteeObj = doc2.data();
console.log("Sending to Mentor: ", mentorEmail);
const confirmationMentor = {
to: mentorEmail,
from: *******,
template_id: ********,
dynamicTemplateData: {
name: mentor.firstName,
menteeName: "MenteeNameHere"
},
};
console.log("Sent to Mentor: ", confirmationMentor);
return sendgrid.send(confirmationMentor)
.then(() => {
// console.log('Confirmation successfully sent to ' + mentorEmail);
console.log("sending to mentee");
...
})
.catch(error => console.error(error.toString()));
只需将上面的“error.toString()”替换为“SomeText”即可将控制台中的 TypeError 消息替换为“SomeText”。此外,“发送给学员”不在控制台日志中。此外,所有源代码中的任何地方都没有引用“.values”。
在控制台日志中,我看到 JSON 正在传递:
{ to: '*****',
from: '*****',
template_id: '******',
dynamicTemplateData: { name: 'Rocky McChocolate', menteeName: 'MenteeNameHere' } }
我把它放在一个在线 JSON 验证器中,它是无效的。但是,我相信这是因为它在日志中的显示方式,而不是 JSON 的实际外观。因为这是有效的,所以我改变的只是模板 ID。好吧,我想我已经在上面描述了这一点(可能在错误的地方)。客户有一个 firebase 应用程序,它会发送电子邮件。他们想要一个不同的电子邮件。因此,我创建了电子邮件(在 Twilio/Sendgrid 中),并更改了 template_id 值并期望发送新电子邮件。相反,我收到此错误消息。我已经与客户确认,这些电子邮件是在我处理之前发送的。
解决方案
该错误"TypeError: Object.values is not a function"
来自您的代码,而不是来自 SendGrid。在某处,某些东西以无效的方式调用.values
,但它不在您在此处显示的代码中。
没错,这不是有效的 JSON。您是否需要toJSON
在值上调用 a 或类似参数,才能将其转换为 JSON 字符串?
推荐阅读
- node.js - 如何在没有 res.render 的情况下将数据传递给 ejs?
- kdb - Enums for tables
- r - 在 R 中将两列堆叠在一起并创建说明其来源的新列
- c - MPLABX - PIC24FJ1024GB610 - 多重定义错误
- java - Spring 控制器:如何将 json 反序列化为 Map
- python - 带参数的 Tkinter 命令按钮
- javascript - JavaScript 模态
- c - 为什么当我声明一个 int 变量时,我的应用程序会冻结?C程序
- amazon-web-services - 如何使用版本创建 DynamoDb 表?
- javascript - 当用户滑动 L 或 R 时,在堆栈中重新排序s