使用 Firebase 监听嵌套更改的正确方法是什么?

2024-04-21

背景:

我正在尝试使用 Firebase、Twilio 和 Node.js 通过浏览器发送短信。我当前在 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 }
      }
    }
  }
}

当通过前端将消息添加到 Firebase 时,后端需要收到通知才能通过 Twilio 发送短信。当后端收到来自手机的回复(通过 Twilio)时,会将其添加到 Firebase。

问题:

当我侦听线程的更改时,我会收到该电话号码发送/接收的所有消息。显然后端不想再次发送所有消息,所以我只对添加到线程中的最新消息感兴趣。

另外,我似乎无法轻松获取下面有消息的电话号码(密钥)。

我尝试过的:

ref.child('messages').on('child_added', ...)— 这适用于添加的新电话号码/messages,但是 Firebase 不会发送新的电话号码(密钥),只会发送来自FB-GENERATED-KEY-2 down.

ref.child('messages').on('child_changed', ...)— 这返回all线程中的消息,而不仅仅是新消息。我可以在服务器上排序并找到最新的消息,但这似乎很快就会变得很重 - 如果您发送了数千条消息怎么办?

在根级别存储消息(又名展平树)并将号码存储为属性也可以,但我需要使用电话号码作为一种索引,以便稍后与其他数据连接(例如外键)。

问题:

  • 如何在监听父级活动时仅获取最新消息/messages而不是特定的电话号码?
  • 使用时如何获取密钥(电话号码)child_ event?
  • 这个数据结构有意义吗?

您可以通过调用获取 Firebase 密钥key() https://www.firebase.com/docs/web/api/firebase/key.html在您返回的快照上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) {

});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Firebase 监听嵌套更改的正确方法是什么? 的相关文章

随机推荐