无法删除Firebase节点

时间:2018-08-14 16:36:59

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

我对此不知所措。我无法从Web应用程序或通过Firebase控制台删除Firebase中的节点。通过set(null)remove()删除/ courses / {courseId} / members / {uid}节点后,将立即添加用户信息。

我确实有两个更新seats节点的云函数,因此我们可以跟踪空间,但是这些都没有指向../{uid}端点。我还检查了我的Web应用程序代码,以确保没有on_delete个事件写入树。 有什么线索吗?

更新

在提交树中向后移动后,我能够确认它是下面的云函数,不允许从树中删除。因此,我的问题现在变成了,此功能中的什么导致了该行为?我看不到任何会重写数据的东西。我的数据库结构如下。

/课程参考

courses: {
    someStringId1234: {
        members: {
            uid12345: {
                code: 'someString',
                email: 'some@email.com'
            },
            uid67890: { ... }
        },
        seats: 10
      },
      { ... }
}

此云功能监视uid项目的更改。它获取父节点(members),然后更新seats中的计数。由于某种原因,这是在重写先前删除的密钥并将其设置为0。

countRegistration,firebase云功能

exports.countRegistrations = functions.database.ref('/courses/{courseId}/members/{uid}').onWrite(
  (change) => {
      // get the `members` node for the item
      const collectionRef = change.after.ref.parent;
      console.log('collectionRef', collectionRef)
      // get the `seats` key for updating
      const countRef = collectionRef.parent.child('seats');
      console.log('countRef', countRef)

      let increment;
      // If the ID is there after but not before, remove one seat
      if (change.after.exists() && !change.before.exists()) {
        increment = -1;
        // if the ID is not there after, but there before, add one seat
      } else if (!change.after.exists() && change.before.exists()) {
        increment = 1;
      } else {
        // Nothing to change
        return null;
      }

      // Return the promise from countRef.transaction() so the function
      // waits for this async event to complete before it exits.
      return countRef.transaction((current) => {
        console.log('Line 38', current)    // debugging, confirms the correct refs are grabbed by the function
        return (current || 0) + increment;
      }).then(() => {
        return
      });
    });

只是为了好玩,这是当我尝试直接在控制台中删除节点时发生的情况。数据库规则允许您在登录后进行写操作。

Gif showing inability to remove node in firebase

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我刚刚解决了它。发生错误是由于它正在使用的节点数据。 请检查当前使用节点的位置,然后中断或注销。然后,可以删除该节点。

说明::如果该节点是用户信息,并且当前用户已登录,则无法删除该节点。不断地,只要删除节点,就重新创建节点。

答案 1 :(得分:0)

我有同样的问题。事实证明,删除该节点将导致太多的Firebase函数无法执行。尝试在CLI中使用delete命令,它可能会为您提供有关该错误的更多信息。 firebase database:remove <//path to node>

答案 2 :(得分:0)

在这种情况下,我正在使用处理程序将我的活动刷新延迟2-3秒,如果有人遇到此错误,请确保:-

  1. 请勿刷新活动或显示(重新加载数据库)

  2. 使用处理程序延迟2-3秒,然后登录的用户将无法自动重新制作节点。

我以前如何删除节点:-

<div v-if='park.parkCity == "paris" || == "london" '>

更新:

在进行更多工作之后,我发现我也遇到了相同的错误,因为使用了addValueEventListener <,在这种情况下,它是在删除数据库或在数据库中添加某些东西时自动添加数据,如果您使用addListenerForSingleValueEvent,那么将会添加或删除数据时没有任何问题。

最终结论:

addValueEventListener(如果您希望每次发生任何添加或删除操作时刷新页面

addListenerForSingleValueEvent(如果您不想在添加或删除内容时刷新页面)