firebase更复杂的验证

时间:2014-06-07 11:42:28

标签: firebase

我正在创建一个带有firebase后端的角度应用程序作为API。

人们可以在日历上预约,但2人不能共享相同的小时位。此外,由于约会可以每半小时开始,检查会变得有点复杂。

我可以让firebase执行更复杂的验证吗?它几乎涵盖了我需要的所有其他东西,我讨厌创造一些自定义的东西,只因为这个功能!

谢谢!

2 个答案:

答案 0 :(得分:2)

如果我是对的,你说你不想做检查客户端。听起来不错。这就是我要做的事情:

存储约会时,我会根据他们的时间来命名。客户端代码:

var dataRef = new Firebase('https://example.firebaseio.com/');
dataRef.child('2014-6-9-0500').set('name'); // 5:00 6/9/2014 converted to a string

因此,约会将根据他们的时间命名,他们的价值将等于当时正在安排的人的姓名。这将使两个人无法同时安排(因为在Firebase中,不能有两个同名的孩子)。

在您的安全选项卡中,检查数据是否已存在(以防止覆盖现有约会)。然后,对于验证,您可以检查约会时间并确保它以" 00"或" 30",长度为12位。规则看起来像这样:

"rules": {
  ".read": true,

  "$time": {
    ".write": "!data.exists()",
    ".validate": "$time.endsWith('00') || $time.endsWith('30')"
  }
}

虽然可以接受无效的时间(例如" 0000-0-0-0030"或者甚至" qt00"),有效的约会提交将不会与另一个约会同时安排,并且约会有时会在" 00"或":30" (半小时间隔)。

唯一的问题是,如果一个人从中午开始一个小时的预约。您必须安排多个约会:一个在12:00,另一个在12:30。这可能会有点烦人,但我不知道有任何其他方法可以做到这一点。

答案 1 :(得分:1)

根据我的理解,Firebase可以实现。但是,Firebase没有像Mongo那样的动态查询功能。我相信你必须采取一种非常原始的方法来解决这个问题,例如:

db.child('calendar').once('value', function(snapshot){
  var hours = snapshot.val();
  // for each hour
    // do validation here
})