【发布时间】:2017-09-18 17:31:07
【问题描述】:
我有一个如下所示的 messages 条目:
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 中的列表项的最佳方法是什么?
【问题讨论】:
-
有什么理由不能简单地触发
/messages/{messageId}?所以functions.database.ref('/messages/{messageId}'). -
当我调用
push()时,消息 id 是由 firebase 生成的,所以问题是 - 我如何从更改中获取消息 id? -
const messageId = event.params.messageId -
获取引用路径通配符是expained here
-
我刚刚得到了你的两个答案。如果我在
/messages/{messageId}上收听,有什么方法可以从事件中获取 ref 还是需要使用db.ref('/messages').child(event.params.messageId);构建它?
标签: javascript firebase firebase-realtime-database google-cloud-functions