Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.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 在Google云函数中更新change Firebase触发器中的ref_Javascript_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

Javascript 在Google云函数中更新change Firebase触发器中的ref

Javascript 在Google云函数中更新change Firebase触发器中的ref,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,我有一个消息条目,如下所示: firbaseapp messages -KiG85eYMH7jfKph4bl3 created: 1492788734743 title: "title" message: "message" 我想在新条目添加到此列表时发送通知,以便 我添加了这个云函数: exports.sendMessageNotification = functions.database.ref('/messages/').onWrite(eve

我有一个
消息
条目,如下所示:

firbaseapp
 messages
   -KiG85eYMH7jfKph4bl3
      created: 1492788734743
      title: "title"
      message: "message"
我想在新条目添加到此列表时发送通知,以便 我添加了这个云函数:

exports.sendMessageNotification = functions.database.ref('/messages/').onWrite(event => {

    event.data.forEach(message => {

        if (message.val().notificationSent) {
            return;
        }

        admin.messaging().sendToTopic(...)
        .then(res => {
            return db.ref('/messages').child(message.key).update({
                notificationSent: (new Date()).getTime(),
            });
        })
    });
});
问题是
message。key
messages-KiG85eYMH7jfKph4bl3
,因此当我尝试保存它时,它会创建一个新条目,而不是更新现有条目:

firbaseapp
 messages
   -KiG85eYMH7jfKph4bl3
      created: 1492788734743
      title: "title"
      message: "message"
   -messages-KiG85eYMH7jfKph4bl3
      notificationSent: 123434554534
我想要的是在现有条目上设置
notificationSent

我还尝试使用
message.ref
,但得到了相同的结果


那么,在云功能中更新firebase中的列表项的最佳方式是什么?

我认为这就完成了您想要做的事情,并回答了您在评论中提出的问题:

exports.sendMessageNotification = functions.database.ref('/messages/{messageId}')
  .onWrite(event => {
    const messageId = event.params.messageId;
    console.log('messageId=', messageId);

    if (event.data.current.child('notificationSent').val()) {
        console.log('already sent');
        return;
    }

    const ref = event.data.ref; // OR event.data.adminRef

    admin.messaging().sendToTopic(...)
        .then(res => {
            return ref.update({
                // Caution: this update will cause onWrite() to fire again
                notificationSent: (new Date()).getTime(),
            });
        })
});

你为什么不能简单地触发
/messages/{messageId}
?所以
functions.database.ref('/messages/{messageId}')
。消息id是由firebase在调用
push()
时生成的,所以问题是-如何从更改中获取消息id?
const messageId=event.params.messageId
获取ref-path通配符我刚刚得到了您的两个答案。如果我监听
/messages/{messageId}
是否有任何方法可以从事件中获取ref,或者是否需要使用
db.ref('/messages').child(event.params.messageId)构建它