2017-11-18 121 views
0

我想自動爲添加到Firebase數據庫的新項目創建過期時間戳。所以我寫了以下功能:Firebase功能:操作admin.database.ServerValue.TIMESTAMP

exports.onCreateNewItem = functions.database.ref('/items/{item_id}').onCreate(event => { 
    var mergedUpdate = {}; 
    mergedUpdate['expiration'] = admin.database.ServerValue.TIMESTAMP + 2678400000; 
    return event.data.adminRef.update(mergedUpdate); 
}) 

但是,它不起作用。 /items/{item_id}/expiration的值是"[object Object]2678400000",而我預計它是從現在開始的31天的時間戳。

回答

3

由於您的雲端功能代碼在Google服務器上運行,因此您可以通過Date.now()訪問服務器時間。您不需要使用admin.database.ServerValue.TIMESTAMP

exports.onCreateNewItem = functions.database.ref('/items/{item_id}').onCreate(event => { 
    var mergedUpdate = {}; 
    mergedUpdate['expiration'] = Date.now() + 2678400000; 
    return event.data.adminRef.update(mergedUpdate); 
}) 
+0

雖然這確實是正確的,但有一些細微差別。例如:Date.how()和admin.database.ServerValue.TIMESTAMP的值不能保證(也不太可能)相同。這意味着你不能使用'Date.now()',並在安全規則中成功地將它與'now'比較。所以:雖然你的方法在很多情況下可能都很好,但它不是一個直接替代品。 –

+0

只要差異在分鐘範圍內,我就可以。這不是這種情況嗎? – user2145097

+0

弗蘭克在他的評論中發現的時代的差異決不會超過一秒。 –