Firebase 在部署后不发送电子邮件 + 无日志



我实现了下面的代码,当我使用npm start在本地机器上运行它时,它运行得非常好

然而,当我在Firebase上部署它时,sendOrderEmail功能不起作用。

我甚至没有任何日志。

const functions = require("firebase-functions");
const admin = require("firebase-admin");
const {email, password} = require('./config');
const nodemailer = require('nodemailer');
const htmlToText = require('nodemailer-html-to-text').htmlToText;
admin.initializeApp();
const mailTransport = nodemailer.createTransport({
service: 'gmail',
auth: {
user: email,
pass: password
}
});
mailTransport.use("compile", htmlToText());
const APP_NAME = 'the.Travelest';
exports.sendUserEmail = functions.database
.ref("/lettersRequest/{pushId}")
.onCreate(request => {
return sendOrderEmail(request.val().email);
});
async function sendOrderEmail(email){
const mailOptions = {
from: `${APP_NAME}`,
to: email,
subject: `Your order from ${APP_NAME}`,
html: `
<div>
<strong> Hello </strong>
World
</div>
`
};
return await mailTransport.sendMail(mailOptions);
}

更新在检查了逻辑之后,我相信我已经在另一个地方发现了问题。

所以,逻辑是-当我点击提交的形式,我发送数据到Firebase运行时数据库。此操作触发上述函数并发送电子邮件。

但是,SUBMIT按钮没有触发它应该触发的流程。当我点击SUBMIT时,我甚至看不到控制台的console.log结果同样,当我运行nom start

时,它在本地工作下面是提交处理程序:

const handleSubmit = event => {
event.preventDefault();
setErrors(validate(values))
setIsSubmitting(true)
try{
const newRequestRef = database.ref('lettersRequest').push();
const newRequest = {
country: values.country,
travelersAmount: values.travelersAmount,
introExtro: values.introExtro,
comments: values.comments,
email: values.email,
phone: values.phone
};
newRequestRef.set({
email: values.email,
request: newRequest
});
console.log("no error")
}catch(e){
console.log("error")
}
}

您没有处理set()返回的承诺。试试这个:

const handleSubmit = event => {
event.preventDefault();
setErrors(validate(values))
setIsSubmitting(true)
const newRequestRef = database.ref('lettersRequest').push();
const newRequest = {
country: values.country,
travelersAmount: values.travelersAmount,
introExtro: values.introExtro,
comments: values.comments,
email: values.email,
phone: values.phone
};
newRequestRef.set({
email: values.email,
request: newRequest
}).then(() => {
console.log("Request Added in Database")
}).catch(e => console.log(e));
}

如果它记录'Request Added in Database',那么它已经成功添加,你的函数应该触发。

此外,这也可以通过Callable Function来完成,这意味着你可以直接从客户端调用函数,完成所有的验证,在数据库中添加数据并发送电子邮件,而不是使用数据库触发器。

所以,这个问题比我想象的更微不足道我确实部署到firebase,但我从来没有提交和构建项目……因此,每次部署后都没有更新任何内容。

愚蠢的错误

最新更新