Node.js 如何在nodeJS中显示firebase数据库中的数据

Node.js 如何在nodeJS中显示firebase数据库中的数据,node.js,firebase,firebase-realtime-database,google-cloud-functions,nodes,Node.js,Firebase,Firebase Realtime Database,Google Cloud Functions,Nodes,我想在邮件中发送用户名,但每次都会发送该用户名的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

我想在邮件中发送用户名,但每次都会发送该用户名的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);
});
}
输出应该是文本,而不是用户名的url

数据库应该是这样的

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

var name = snapshot.ref.parent.child('name');
实际上,您为变量
name
分配了一个变量,因为该方法返回一个引用

因此,您需要通过执行以下操作来查询此引用处的值

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());
      });

 });

如果您同时设置用户的姓名和电子邮件,则在
用户
节点的级别而不是
电子邮件
节点的级别触发云功能可能会更容易,如:

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;
      ......

如果看不到数据库中的内容,就不可能说出哪里出了问题。您在这里处理的所有实际值是什么?@DougStevenson我在最后一行更新了我的答案请检查亲爱的Renaud两种方法都不起作用显示此错误:在SMTPConnection中未定义收件人。_formatError(/user\u code/node\modules/nodemailer/lib/smtp connection/index.js:605:19)请在第二种方法中帮助我首先,你能确认name和email的值是正确的吗?您可以在云函数代码中执行一些console.log(),并在Firebase控制台中查看输出。您可以确保名称和电子邮件值绝对正确。否则,带有错误电子邮件地址的电子邮件将无法发送我不确定是否理解:你说邮件发送正确吗?您的
邮件传输是如何定义/声明的?也许你可以提出一个新的问题,包括你如何声明mailTransport的所有细节,产生错误的行是什么;等事实上,您最初的问题是关于获取
名称
值的问题。
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;
      ......