将 Firebase 数据库值导入云函数



我目前正在使用 Firebase Functions 在上传数据库时发送自动推送通知。它运行良好,我只是想知道如何从我的数据库中获取特定值,例如 PostTitle 并将其显示在上面,例如标题。

在Firebase中,我的数据库是/post/(postId(/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 payload = {
        notification: {
           title: 'This is the title.',
            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).then(response =>{
              return null;
            });
        }
        return 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; 
    });
});

请注意以下几点:

  1. 您正在使用云函数的旧语法,即版本 <= v0.9.1 之一。应迁移到新版本和语法,如下所述:https://firebase.google.com/docs/functions/beta-v1-diff#realtime-database
  2. 我重新组织了您的承诺链,并在链的末尾添加了catch()

我会使用...

var postTitle = event.data.child("PostTitle").val;

虽然可能检查,但它的标题甚至有一个价值

。在发送任何通知之前。

相关内容

  • 没有找到相关文章

最新更新