Переменные из firebase в nodemailer внутри облачных функций - PullRequest
0 голосов
/ 11 декабря 2018

Я использую nodemailer в firebase cloudfunctions для отправки электронных писем пользователям по нескольким триггерам.

По сути, это работает, одна вещь, которую я не могу обдумать, заключается в следующем: мой Супер Администратор имеет право писать новые почтовые шаблоны, которые сохраняются в базе данных 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}
    `....

console.log из msg.title дает мне следующее:

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

console.log для status.userData.nameдает мне

"prename surname"

Проблема в том, что в электронном письме я все равно получаю ${status.userData.name}.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 13 декабря 2018

Если кто-то споткнется, воспользуйтесь этим: Решение на самом деле довольно простое:

, поскольку переменная $ {msg.title} содержит переменные внутри строки, мне просто нужно было заменить переменную в строке фактической переменной, например@ Дуг Стивенсон предложил:

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