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);
}
});
});
}
});
在下面的代码中,在处理快照中返回的数据后,我试图删除有问题的记录。当我使用通过子方法附加的记录键对我的引用调用 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);
}
});
});
}
});