每当onchild创建云功能实时数据库时添加父子

时间:2018-10-06 15:31:26

标签: node.js firebase firebase-realtime-database google-cloud-functions

这里,我有代码,只要添加了孩子,它将触发ref /tugas_course/{course_id}/{tugas_id}来向Android设备发送通知。它已经做得很好。但是我想在其中添加一个函数,我想在这个引用之外添加子元素flag_tugas,并将其填充为flag_tugas-course_id-tugas_id-user.uid: "o"。我不知道如何添加它,因为返回值已经包含所有内容以及如何在云函数中获取用户ID。

export const onNotifTugas = functions.database.ref('/tugas_course/{course_id}/{tugas_id}')
.onCreate((snapshot, context) =>{


    const course_id = context.params.course_id;
    const tugas_id = context.params.tugas_id;

    console.log(`New Message ${course_id} in ${tugas_id}`);

    return admin.database().ref('/tugas/' + tugas_id +'/').once('value').then(snap => {
            const tugasData = snap.val();
            const notifDataSend = { // buat structure data json dgn nama const notifDataSend untul cloud messaging
                data: {
                            data_type: "tugas",
                            title: "Anda mendapatkan notifikasi baru..", // data bebas (key, value)
                            body: `Tugas ${tugasData.nama_tugas} baru`, // chatId = const chatId
                            sound: "default"
                      }
             };

            console.log(`data yang dikirim `);
            return admin.messaging().sendToTopic(course_id, notifDataSend) 

            .then(function(response) {
                console.log("Successfully sent message:", response);
              })
            .catch(function(error) {
                console.log("Error sending message:", error);
              });

    }).catch(error => {
        console.log(error);
    })

});


    }

实际上在eclassapp下添加了新的孩子 enter image description here

非常感谢您的宝贵时间和答复。

1 个答案:

答案 0 :(得分:2)

我不确定是否要完全了解要在节点树中的时间戳记中添加时间戳的位置(在/tugas_course/{course_id}/{tugas_id}/new_child还是/tugas_course/{course_id}/{tugas_id}下),但是以下代码可用于添加timestamp/tugas_course/{course_id}/{tugas_id}下的值。如果需要,可以更改ref的值,将时间戳记写入所需的位置。

exports.onNotifTugas = functions.database
  .ref('/tugas_course/{course_id}/{tugas_id}')
  .onCreate((snapshot, context) => {
    const ref = snapshot.ref;
    const ts = admin.database.ServerValue.TIMESTAMP;
    return ref.update({
      date_time: ts
    });
  });

但是请注意,您不需要云功能即可从服务器添加时间戳,请参见https://firebase.google.com/docs/reference/js/firebase.database.ServerValue

因此,在您的情况下,您将执行以下操作:

var tugaRef = firebase.database().ref("/tugas_course/course_id/tugas_id");
tugaRef.push({
  foo: bar,  //Other data of your 'tugas' object
  createdAt: firebase.database.ServerValue.TIMESTAMP
})