2017-02-16 55 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" 
     } 
    } 
    } 
}