Javascript 如何在创建触发器时访问Firebase云函数数据库的值

Javascript 如何在创建触发器时访问Firebase云函数数据库的值,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,我创建了一个函数,用于在onCreate启动后发送电子邮件,但遇到了问题 在尝试访问值之后 exports.sendEmailConfirmation = functions.database .ref('/contact') .onCreate(async (snapshot, context) => { const val = snapshot.val(); console.log(val); const mailOptions = { from: val.name,

我创建了一个函数,用于在onCreate启动后发送电子邮件,但遇到了问题 在尝试访问值之后

exports.sendEmailConfirmation = functions.database
.ref('/contact')
.onCreate(async (snapshot, context) => {
  const val = snapshot.val();
  console.log(val);
  const mailOptions = {
  from: val.name,
  to: 'kris@gmail.com',
  title: val.message,
};

try {
  await mailTransport.sendMail(mailOptions);
  console.log(`New ${val.message ? '' : 'un'} message sent to:`, val.email);
} catch (error) {
  console.error('There was an error while sending the email:', error);
}
return null; 
});
没有定义

新的联合国信息发送至:未定义

然后尝试使用一个想要引用但随机的键

{ '-LuFhQVjr-T7UFYioi-d': 
 { email: 'Kris@gmail.com',
 message: 'Hello cloud function',
 name: 'Kris' 
 } 
}
再次尝试使用spread,但遇到更多问题函数未启动


如何访问此功能?

/contact
下创建新节点时,您似乎试图触发一个功能。在这种情况下,您希望在声明中包含新子节点路径的占位符:

exports.sendEmailConfirmation = functions.database
.ref('/contact/{pushid}')
.onCreate(async (snapshot, context) => {
  const val = snapshot.val();
  console.log(val);
  const mailOptions = {
    from: val.name,
    to: 'rferfe@gmail.com',
    title: val.message,
  };
  ...

当在
/contact
下创建一个新节点时,看起来您正试图触发一个函数。在这种情况下,您希望在声明中包含新子节点路径的占位符:

exports.sendEmailConfirmation = functions.database
.ref('/contact/{pushid}')
.onCreate(async (snapshot, context) => {
  const val = snapshot.val();
  console.log(val);
  const mailOptions = {
    from: val.name,
    to: 'rferfe@gmail.com',
    title: val.message,
  };
  ...

在堆栈溢出时,请不要显示文本的图片。最好将文本复制到问题中,以便更容易阅读和搜索。发送到的
新un消息:undefined
似乎来自其他地方,因为您的代码只记录
snapshot.val()
。在堆栈溢出时,请不要显示文本图片。最好将文本复制到问题中,以便更容易阅读和搜索。发送到的新un消息
未定义
似乎来自其他地方,因为您的代码只记录
snapshot.val()