Typescript 为什么我的SendGrid函数返回“0”;服务不可用;?
我是SendGrid的新手,正在尝试使用Firebase云功能从我的React.js应用程序发送am电子邮件。 当有人想要发送消息时,我会向Firestore写入一个文档。然后,我收听该集合,当创建文档时,我从云功能发送电子邮件 我正在尝试使其正常工作,但在我的云函数中不断记录错误,并显示以下错误消息:Typescript 为什么我的SendGrid函数返回“0”;服务不可用;?,typescript,firebase,google-cloud-functions,sendgrid,Typescript,Firebase,Google Cloud Functions,Sendgrid,我是SendGrid的新手,正在尝试使用Firebase云功能从我的React.js应用程序发送am电子邮件。 当有人想要发送消息时,我会向Firestore写入一个文档。然后,我收听该集合,当创建文档时,我从云功能发送电子邮件 我正在尝试使其正常工作,但在我的云函数中不断记录错误,并显示以下错误消息: Error: Service Unavailable at axios.then.catch.error (node_modules/@sendgrid/client/src/class
Error: Service Unavailable
at axios.then.catch.error (node_modules/@sendgrid/client/src/classes/client.js:133:29)
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)
这是我的云函数,我检查了所有变量,它们都存在
exports.firestoreEmail = functions.firestore
.document("email_messages/{messageID}")
.onCreate((snap, context) => {
const msgData = snap.data();
if (!msgData) return;
return db
.collection("users")
.doc(msgData.recipient_ID)
.get()
.then((doc) => {
const recipientData = doc.data();
if (!recipientData) return;
const promises: any = [];
const msg = {
to: recipientData.email,
from: msgData.sender_email,
templateId: "d-myRandomTemplateId",
dynamic_template_data: {
sender_name: "Some One",
},
};
const msg2 = {
to: msgData.sender_email,
from: recipientData.email,
templateId: "d-myRandomTemplateId",
dynamic_template_data: {
sender_name: "Some One",
},
};
promises.push(sgMail.send(msg));
promises.push(sgMail.send(msg2));
return Promise.all(promises);
});
});
请选中此项,其中指定了如何使用sgMail.send方法,该方法导致云函数返回服务不可用错误
send和sendMultiple方法返回承诺,因此您可以处理成功和捕获错误:
sgMail
.send(msg)
.then(() => {
// Celebrate
})
.catch(error => {
// Log friendly error
console.error(error);
if (error.response) {
// Extract error msg
const {message, code, response} = error;
// Extract response msg
const {headers, body} = response;
console.error(body);
}
});
或者,您可以将回调函数作为最后一个参数传递:
sgMail
.send(msg, (error, result) => {
if (error) {
// Do something with the error
}
else {
// Celebrate
}
});
请让我知道它是否有效。您的定价计划是什么?你需要参与“Blaze”定价计划。事实上,免费的“Spark”计划“只允许向谷歌拥有的服务发出出站网络请求”。请参阅(将鼠标悬停在“云功能”标题后的问号上),因为Sendgrid不是谷歌所有的服务,您需要切换到“Blaze”计划。@RenaudTarnec感谢您的评论。我在Firebase项目的Blaze计划中,SendGridOk中的免费计划,你如何定义
sgMail
?@RenaudTarnec用该信息编辑了我的问题似乎是正确的!奇怪的是,你得到了一个axios错误。。。Axios通常不参与您的云功能。。。有什么想法吗?还有其他使用axios的代码吗?谢谢,这帮我解决了我的问题。对于我的“发件人”字段,我设置了一封未设置为授权发件人的电子邮件
sgMail
.send(msg)
.then(() => {
// Celebrate
})
.catch(error => {
// Log friendly error
console.error(error);
if (error.response) {
// Extract error msg
const {message, code, response} = error;
// Extract response msg
const {headers, body} = response;
console.error(body);
}
});
sgMail
.send(msg, (error, result) => {
if (error) {
// Do something with the error
}
else {
// Celebrate
}
});