Javascript 将Firebase数据库值获取到云函数中
我目前正在使用Firebase函数在上传数据库时发送自动推送通知。它工作得很好,我只是想知道如何从我的数据库中获取一个特定的值,例如PostTitle,并在上面显示它,例如title 在Firebase中,我的数据库是/post/(postId)/PostTitleJavascript 将Firebase数据库值获取到云函数中,javascript,firebase,firebase-realtime-database,firebase-cloud-messaging,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Firebase Cloud Messaging,Google Cloud Functions,我目前正在使用Firebase函数在上传数据库时发送自动推送通知。它工作得很好,我只是想知道如何从我的数据库中获取一个特定的值,例如PostTitle,并在上面显示它,例如title 在Firebase中,我的数据库是/post/(postId)/PostTitle const functions=require('firebase-functions'); const admin=require('firebase-admin'); admin.initializeApp(functions
const functions=require('firebase-functions');
const admin=require('firebase-admin');
admin.initializeApp(functions.config().firebase);
//数据库树
exports.sendPushNotification=functions.database.ref('/posts/{id}').onWrite(事件=>{
常数有效载荷={
通知:{
标题:“这就是标题。”,
正文:“有一个新的职位可用。”,
徽章:“0”,
声音:'默认',
}
};
返回admin.database().ref('fcmToken')。一次('value')。然后(allToken=>{
if(allToken.val()){
const-token=Object.keys(allToken.val());
log(`token?${token}`);
返回admin.messaging(){
返回null;
});
}
返回null;
});
});
如果我正确理解您希望从触发云函数的节点获取PostTitle
,那么以下操作应该可以完成:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
// database tree
exports.sendPushNotification = functions.database.ref('/posts/{id}').onWrite(event =>{
const afterData = event.data.val();
const postTitle = afterData.PostTitle; //You get the value of PostTitle
const payload = {
notification: {
title: postTitle, //You then use this value in your payload
body: 'There is a new post available.',
badge: '0',
sound: 'default',
}
};
return admin.database().ref('fcmToken').once('value').then(allToken => {
if (allToken.val()){
const token = Object.keys(allToken.val());
console.log(`token? ${token}`);
return admin.messaging().sendToDevice(token, payload)
} else {
throw new Error('error message to adapt');
}
})
.catch(err => {
console.error('ERROR:', err);
return false;
});
});
注意以下几点:
var postTitle = event.data.child("PostTitle").val;
在可能进行检查时,标题甚至有一个值
。。。在发送任何通知之前。太棒了!我唯一需要更改的是event.data.val();要更改.after.val();和exports.sendPushNotification=functions.database.ref('/posts/{id}').onWrite(事件=>{to exports.sendPushNotification=functions.database.ref('/posts/{id}')).onWrite((更改,上下文)=>{。