【问题标题】:Getting the proper event.data from onWrite in Cloud Functions with Firebase使用 Firebase 从 Cloud Functions 中的 onWrite 获取正确的 event.data
【发布时间】:2017-06-13 19:42:51
【问题描述】:

我觉得我只是在这里遗漏了一些愚蠢的东西,因为包括 codelab 在内的所有示例都表明访问事件数据很简单。但我无法让它工作。

我有一个简单的聊天/对话结构,如下所示: conversations/uniqueconversationId/uniquemessageId/ 在唯一的消息中,我存储文本、用户等。每次在应用程序中发布新消息时,我都会将新消息推送到对话中。

在 Cloud Functions 中,我想知道何时发布新消息并发送通知。这与 codelab 示例几乎 100% 相同。

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,顺便说一句)。这篇写得很好。

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().text 并获得“已发送测试消息”。

您可以指出我的任何方向将不胜感激。谢谢。

【问题讨论】:

  • 请更新您的帖子以包含将新消息写入数据库的语句。
  • 刚刚更新以包含它@BobSnyder

标签: firebase firebase-realtime-database google-cloud-functions


【解决方案1】:

您触发的写入级别太高。您想写入消息 ID:

functions.database.ref('/conversations/{conversationId}/{messageId}').onWrite(...)

那么快照将针对messageId 下的messageData,而不是对话中所有消息的列表。

【讨论】:

  • 呃,我发誓我试过了。感谢 Bob 的快速回复。完美运行。
猜你喜欢
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 2018-01-19
  • 2017-10-27
  • 2017-12-24
  • 2017-09-01
  • 2017-11-10
  • 2021-07-25
相关资源
最近更新 更多