2012-12-24 30 views
4

某人如何創建指向Firebase數據的臨時網址,但是數據(和網址)在特定時間後即5分鐘或15分鐘後會被銷燬?使用Firebase過期網址

+1

有在火力地堡數據沒有過期。您可以輕鬆創建一些過程,即在給定時間段後簡單地刪除數據。要安全地做到這一點,需要該進程在某種服務器上運行。 –

+0

@FrankvanPuffelen這聽起來像個好主意。你能解釋一種方法來輕鬆解決這個問題嗎? – nodebase

+1

如何在可能過期的每一條數據中添加時間戳?然後,在您自己的服務器上運行定期檢查**或**將時間戳記保存在專門的客戶端中,只需從服務器上刪除時間到。 –

回答

5

根據數據的存儲方式,有幾種不同的選項可以通過時間戳刪除數據。

假設數據是無序的,你所儲存的時間戳字段中的每個記錄,那麼你可以簡單地開始從第一條記錄閱讀和刪除它們,直到你找到你想保留一個:

<script> 
var FB = new Firebase(YOUR_URL); 
var childRef = FB.child(TABLE_WITH_RECORDS_TO_DELETE); 
var oneWeekAgo = new Date().getTime()-1000*60*60*24*7; // one week ago 

var fx = function(snapshot) { // keep a ref to this so we can call off later 
    var v = snapshot.val(); 
    if(v.expires_on_date < oneWeekAgo) { 
     // delete the record 
     snapshot.ref().remove(); 
    } 
    else { 
     // we found the first keeper, so we are done 
     childRef.off('child_added', fx); 
    } 
} 

// fetched records and test to see how old they are 
childRef.on('childAdded', fx); 
</script> 

如果數據按時間戳排序,你可以檢索和刪除它們如下:

var FB = new Firebase(YOUR_URL); 
var childRef = FB.child(TABLE_WITH_RECORDS_TO_DELETE); 
var oneWeekAgoMinusOne = new Date().getTime()-1000*60*60*24*7-1; // one week ago 

// fetched using endAt, so only retrieving older than 1 week 
childRef.endAt(oneWeekAgoMinusOne).on('childAdded', function(snapshot) { 
    // delete the record 
    snapshot.ref().remove(); 
}); 
+0

現在總是使用第二種方法。如果需要,使用.sort()功能。 –