Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将Firebase数据库值获取到云函数中_Javascript_Firebase_Firebase Realtime Database_Firebase Cloud Messaging_Google Cloud Functions - Fatal编程技术网

Javascript 将Firebase数据库值获取到云函数中

Javascript 将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

我目前正在使用Firebase函数在上传数据库时发送自动推送通知。它工作得很好,我只是想知道如何从我的数据库中获取一个特定的值,例如PostTitle,并在上面显示它,例如title

在Firebase中,我的数据库是/post/(postId)/PostTitle

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((更改,上下文)=>{。