2017-11-18 84 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

弗兰克在他的评论中发现的时代的差异决不会超过一秒。 –