Ben*_*rey 5 javascript firebase
背景:
我正在尝试使用Firebase,Twilio和Node.js通过浏览器发送SMS消息。我当前在Firebase中的数据结构如下所示:
{ messages :
{ +15553485 :
{ FB-GENERATED-KEY-1 :
{ body: "hello world"
timestamp: 1461758765472 }
},
{ FB-GENERATED-KEY-3 :
{ body: "I love dogs"
timestamp: 1461758765475 }
}
}
},
{ +15550000 :
{ FB-GENERATED-KEY-2 :
{ body: "goodbye world"
timestamp: 1461758765473 }
},
{ FB-GENERATED-KEY-4 :
{ body: "I love cats"
timestamp: 1461758765476 }
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
通过前端将消息添加到Firebase时,后端需要得到通知才能通过Twilio发送SMS。当后端(通过Twilio)从电话获得回复时,它将其添加到Firebase。
问题:
当我侦听线程的更改时,我会收到该电话号码发送/接收的所有消息。显然,后端不想再次发送所有消息,所以我只对添加到线程中的最新消息感兴趣。
另外,我似乎也不太容易获得电话号码(按键),该电话号码下方带有消息。
我尝试过的
ref.child('messages').on('child_added', ...)—这适用于添加到的新电话号码/messages,但是Firebase不会通过新电话号码(键)发送邮件,仅从FB-GENERATED-KEY-2下往下发送所有邮件。
ref.child('messages').on('child_changed', ...)—这将返回线程中的所有消息,而不仅仅是新消息。我可以在服务器上进行排序并找到最新的消息,但这似乎很快就会变得很繁重–如果您发送了数千条消息该怎么办?
可以在根级别存储消息(也就是将树扁平化)并将数字存储为属性,但是可以,但是我将需要使用电话号码作为索引,以便以后与其他数据连接(例如外键)。
问题:
/messages而不是特定的电话号码时,如何仅获得最新消息?child_事件时如何获取密钥(电话号码)?key()您可以通过调用侦听器返回的快照来获取 Firebase 密钥child_added。
然后你可以添加另一个嵌套监听器,如下所示:
ref.child('messages').on('child_added', function (snapshot) {
var phone = snapshot.key();
ref.child('messages').child(phone).on('child_added', function (message) {
//send SMS
}, function (error) {
});
}, function (error) {
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1339 次 |
| 最近记录: |