Firebase 在 ref 上调用 .remove() 正在删除所有父项

Firebase calling .remove() on ref is removing all parents

在下面的代码中,在处理快照中返回的数据后,我试图删除有问题的记录。当我使用通过子方法附加的记录键对我的引用调用 remove 时,所有父节点都被删除,直到 FB 应用程序的根目录。我怀疑这是我的代码中的错误。如果能提供任何帮助,我们将不胜感激。

var Firebase = require('firebase');
var config = require('./config.json');
var fbRef = new Firebase(config.firebaseEndpoint + "/messages");
var messenger = require('./messenger.js');

fbRef.on('value', function (snap) {

//If Data is returned convert payload to array.
//pass each mesaage into messenger and upon completion delete the
// firebase record
if (snap.exists()) {

    var payload = snap.val();
    var keys = Object.keys(payload);

    keys.forEach(function (key) {

        var msg = payload[key];

        messenger(msg, function (msgErr, msgData) {
            if (!msgErr) {

                fbRef.child(key).remove();
            }
            else {
                console.log(msgErr);
            }
        });
     });
   }
});

如果没有看到您的 JSON 结构,很难确定(提示:将其作为文本添加到您的问题中),但我认为您可能误解了 Firebase 的运作方式。

Firebase 将值存储在由路径标识的位置。当您在某个位置存储值时,会自动创建路径。当您从某个位置删除最后一个值时,路径会自动删除。

除此之外,这段代码更加地道:

fbRef.on('value', function (snap) {
  if (snap.exists()) {
    snap.forEach(function(msgSnap) {          
      var msg = msgSnap.val();
      messenger(msg, function (msgErr, msgData) {
        if (!msgErr) {
          msgSnap.ref().remove();
        }
        else {
          console.log(msgErr);
        }
      });
    });
  }
});