2017-02-16 31 views
1

我有一个需要增加的firebase的价值,它受竞争条件的限制,所以我宁愿一一做。从javascript增加firebase价值,受制于

node: { 
     clicks: 3 
    } 

我需要设置clicks = clicks + 1只要clicks < 20。我可以通过Web API进行一次调用吗?

+1

您可以使用Firebase验证规则吗?像'“.validate”:“newData.val()<20”' –

回答

6

reference documentation for a transaction

var ref = firebase.database().ref('node/clicks'); 
ref.transaction(function(currentClicks) { 
    // If node/clicks has never been set, currentRank will be `null`. 
    return (currentClicks || 0) + 1; 
}); 

上面简单地增加值原子,而无需用户覆盖其他人的结果,他的选择。

接下来,确保该值永远不能> 20:

var ref = firebase.database().ref('node/clicks'); 
ref.transaction(function(currentClicks) { 
    // If node/clicks has never been set, currentRank will be `null`. 
    var newValue = (currentClicks || 0) + 1; 
    if (newValue > 20) { 
    return; // abort the transaction 
    } 
    return newValue; 
}); 

良好的措施,你还需要设置安全规则,只允许点击最多为20个安全规则在Firebase数据库服务器上强制执行,这样可确保即使恶意用户也无法绕过您的规则。根据Firebase documentation on validating data中的示例:

{ 
    "rules": { 
    "node": { 
     "clicks": { 
     ".validate": "newData.isNumber() && 
         newData.val() >= 0 && 
         newData.val() <= 20" 
     } 
    } 
    } 
}