在 firebase 中,如何检测存在的值?

In firebase, how can I detect what value is existing?

我想创建的只是一个 'room-maker' 应用程序。

这只是一个应用程序,如果用户输入房间号并单击 "Join" 按钮,

创建新房间,用户前往房间(路线)。

在 Firebase 中,我想知道如何检测房间是否已经存在。

我想编写如下代码。

如果有房间,

console.log("The room is existing.");

如果没有,

console.log("You created new room!");

我的代码(部分)如下

    //Firebase Set
    var ref = new Firebase('https://blinding-inferno-7068.firebaseio.com/');

    //Room set
    $scope.roomNum = $stateParams.roomNum;
    var roomsRef = ref.child('rooms');
    var roomNumRef = roomsRef.child($scope.roomNum);
    roomNumRef.set({roomNum:$scope.roomNum});

我完成了创建新房间的代码,但是如何检测房间是否已经存在?

如果我理解您的核心要求是:如果房间尚不存在,则当前用户创建它,其他人无法再创建该房间

这对我来说就像一笔交易。

roomNumRef.transaction(function(current) {
  if (!current) {
    console.log('You created the room');
    return {
      creator: 'nujabes',
      createdAt: Firebase.ServerValue.TIMESTAMP
    }
  }
  else {
    console.log('The room already existed');
  }
});

使用房间节点的当前值调用事务处理程序。如果您 return 来自处理程序的值,该值将在房间节点上设置。如果你return什么都不做,房间节点将保持不变。

由于 Firebase 将 p运行e 个空节点,我们必须 return 一些值。在这种情况下,我将 creator 设置为硬编码值。但您可能想要确定实际用户。

请注意,只有当两个用户都使用此代码时,以上内容才能防止他们创建同一个房间。恶意用户可以轻松地 运行 他们自己的代码来攻击您的 Firebase 数据库,并且仍然声称其中的任何房间。为防止这种情况,您需要设置防止这种情况的安全规则。阅读此 documentation on Firebase security rules 了解如何操作。