我在firebase cloud函数中使用nodemailer在多个触发器上向用户发送电子邮件。
基本上它是有效的,有一件事我无法理解:我的超级管理员可以编写新的邮件模板,这些模板以字符串的形式保存到firebase数据库中。举个例子,它包含一个字符串形式的标题:
"Welcome to my App ${status.userData.name}!"
在我的云功能中,当触发发生时,我会得到这样一个创建的模板:
Status是来自触发器数据库查询的对象:
exports.sendApplication = functions.database.ref('/xx/{userId}/').onUpdate((change, context) => {
let status = change.after.val();
....
let messageRef = admin.database().ref('users').child('admin').child('template').child('welcome');
messageRef.once('value', snap => {
let msg = snap.val();
console.log('message: ', msg);
const mailOptions = {
from: `${status.userData.email}`,
to: `${status.userData.email}`,
subject: `${msg.title}`
html: `
<h1>${msg.title}</h1>
${msg.message}
`....
消息标题的console.log给了我这个:
"Welcome to my App ${status.userData.name}!"
console.log of status.userData.name给我
"prename surname"
问题是,在我收到的电子邮件中,它仍然是${status.userData.name}
。
感谢您的帮助!
如果有人偶然发现:解决方案其实很简单:
由于变量${msg.title}包含字符串中的变量,我只需要用实际变量替换字符串中的该变量,就像@Doug Stevenson建议的那样:
msg.title = msg.title.replace("${status.userData.email}", status.userData.email);