2016-04-06 6 views
0

次のコードでは、スナップショットで返されたデータを処理した後、問題のレコードを削除しようとしています。子メソッドで追加されたレコードのキーを使用して自分の参照でremoveを呼び出すと、すべての親ノードがFBアプリケーションのルートまで削除されます。私はそれが私のコードのエラーだと思う。提供できる援助を感謝します。Firebaseを呼び出すとrefですべての親が削除されます

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); 
      } 
     }); 
    }); 
    } 
}); 

答えて

1

それはあなたの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); 
     } 
     }); 
    }); 
    } 
}); 
+0

フランク感謝。あなたは私の知識のギャップを特定しました。最後の子供と共にその道が取り除かれたことに気付かなかったからです。また、各自のためにforEachを指摘してくれてありがとう。私はAPIでそれを逃したと私はいくつかの時間を前進させる節約され​​ます。 –

関連する問題