Как показать данные из базы данных Firebase в nodeJS - PullRequest
0 голосов
/ 11 января 2019

Я хочу отправить имя пользователя по почте, но вместо имени URL этого имени отправляется каждый раз. Вот мой код

exports.onUserCreated = functions.database.ref('/user/{pushId}/email')
    .onCreate((snapshot, context ) => {
      // Do something when a new user is created
      var email = snapshot.val();

      var name = snapshot.ref.parent.child('name');

      return sendWelcomeEmaill(email, name);
    });


function sendWelcomeEmaill(email, name){
const mailOptions = {

    from :  `${APP_NAME} <noreply@firebase.com>`,
    to: email,
  };

mailOptions.subject = `Welcome to ${APP_NAME}!`;
mailOptions.text = `Hey ${name || ''}! Welcome to ${APP_NAME}. \n\n We hope you will enjoy our service.`;
return mailTransport.sendMail(mailOptions).then(() => {
  return console.log('New welcome email sent to:', email);
});
}

Здесь в этой строке возникает проблема

var name = snapshot.ref.parent.child('name');

Вывод должен быть в тексте, а не в URL-адресе имени пользователя

База данных будет похожа на

user
   -h(random pushID)
     |---email: "yostar18888@gmail.com"
     |---name : "manik"

1 Ответ

0 голосов
/ 11 января 2019

Делая

var name = snapshot.ref.parent.child('name');

Вы фактически присваиваете Reference переменной name, поскольку метод child() возвращает ссылку.

Итак, вам нужно запросить значение по этой ссылке, выполнив

exports.onUserCreated = functions.database.ref('/user/{pushId}/email')
    .onCreate((snapshot, context ) => {
      // Do something when a new user is created
      var email = snapshot.val();

      var nameRef = snapshot.ref.parent.child('name');  //Note that variable name was changed to nameRef, to be more meaningful

      return nameRef.once('value')
      .then(function(dataSnapshot) {
         return sendWelcomeEmaill(email, dataSnapshot.val());
      });

 });

В случае, если вы одновременно задаете имя и адрес электронной почты пользователя , может быть проще запустить облачную функцию на уровне узла user, а не на уровне email один, как:

exports.onUserCreated = functions.database.ref('/user/{pushId}')
    .onCreate((snapshot, context ) => {
      // Do something when a new user is created
      var email = snapshot.val().email;
      var name = snapshot.val().name;
      ......
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...