我覺得我只是錯過了一些愚蠢的東西,因爲包括codelab在內的所有示例都表明訪問事件數據非常簡單。但我無法讓它工作。使用Firebase中的onWrite獲取適當的event.data
我有一個簡單的聊天/對話結構,看起來像: conversations/uniqueconversationId/uniquemessageId/
和唯一的消息我保存的文本,用戶等每當一個新的消息發佈在應用程序裏面,我推一個新的消息給會話。
在Cloud Functions中,我想知道何時發佈新消息併發送通知。這與codelab示例幾乎完全相同。
exports.sendNotification = functions.database.ref('/conversations/{conversationId}').onWrite(event => {
const snapshot = event.data;
// Only send a notification when a new message has been created.
if (snapshot.previous.val()) {
return;
}
console.log(snapshot);
...
所有的例子都顯示訪問快照的價值很簡單,只要
const text = snapshot.val().text;
但是,這並不爲我工作。當我嘗試訪問它時,它說它是未定義的。當我繼續檢查直接從codelab中獲取的snapshot.previous.val()時,它只是返回,即使我發佈了一條新消息。 (即使我拿出來,所以我可以記錄快照,它仍然不起作用。)
當我在控制檯中看,DeltaSnapshot是巨大的,幷包含對話中的所有消息對象。我無法按預期直接訪問新的消息值。
這是寫入數據庫的代碼塊(這是來自React,BTW)。這個寫法完美。
var messageData = {
user: {
_id: user.uid,
name: user.fullName
},
text: messageText,
createdAt:firebase.database.ServerValue.TIMESTAMP,
sentToUser: conversation.recipientUid
};
this.getRef().child('conversations').child(conversation.conversationId).push(messageData)
這裏是JSON爲例消息:
{
"-Km9qFcNClX3uQXX51D1" : {
"createdAt" : 1496978098834,
"text" : "Test message sent",
"user" : {
"_id" : "cKFnsNkYSyNXm5duUy",
"name" : "Test User"
}
}
}
理想的情況下,基於我希望能夠只使用snapshot.val的例子()文本,並獲得「測試消息發送「。
任何你可以指向我的方向將不勝感激。謝謝。
請更新您的文章以包含將新消息寫入數據庫的語句。 –
剛剛更新,包括它@BobSnyder –