CloudFunction内nodemailer中Firebase中的变量

时间:2018-12-11 17:02:43

标签: javascript firebase google-cloud-functions nodemailer

我在firebase cloudfunctions中使用nodemailer来通过多个触发器向用户发送电子邮件。

基本上可以用,我无法理解的一件事是:我的超级管理员可以编写新的邮件模板,这些模板以字符串形式保存到Firebase数据库中。举例来说,它包含一个标题,例如这样的字符串:

"Welcome to my App ${status.userData.name}!" 

比起我的云函数,当触发发生时,我得到的是这样创建的模板之一:

状态是触发器数据库查询中的对象:

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}
    `....
msg.title的

console.log给我这个:

"Welcome to my App ${status.userData.name}!"

status.userData.name的console.log给我

"prename surname"

问题是,在电子邮件中,我仍然是${status.userData.name}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果有人绊倒了这个: 解决方案实际上非常简单:

变量$ {msg.title}包含在字符串中的变量,我只需要将字符串中的变量替换为@Doug Stevenson建议的实际变量:

msg.title = msg.title.replace("${status.userData.email}", status.userData.email);