我正在创建一个带有firebase后端的角度应用程序作为API。
人们可以在日历上预约,但2人不能共享相同的小时位。此外,由于约会可以每半小时开始,检查会变得有点复杂。
我可以让firebase执行更复杂的验证吗?它几乎涵盖了我需要的所有其他东西,我讨厌创造一些自定义的东西,只因为这个功能!
谢谢!
答案 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
})