Firebase中ServerValue.TIMESTAMP转字符串及用作数据库路径报错咨询
问题1:获取ServerValue.TIMESTAMP的具体时间戳数值
admin.database.ServerValue.TIMESTAMP是Firebase提供的服务端时间占位符对象,并非实际的时间戳数值,只有当写入请求到达Firebase实时数据库服务端时,才会被替换为当前服务端的毫秒级时间戳,本地直接打印/调用自然无法拿到具体值。
可通过以下两种方式拿到可用的时间戳:
- 方法1:写入完成后通过回调获取服务端返回的真实时间戳(时间精度高,和数据库存储值完全一致)
const signupTime = admin.database.ServerValue.TIMESTAMP const ref = database.ref(`/admin/vendorOrder/${vendor}/${userID}`) ref.set(signupTime) .then(() => ref.once('value')) .then(snapshot => { const realTimestamp = snapshot.val() // 转字符串格式时间戳直接调用toString()即可 const timestampStr = realTimestamp.toString() console.log(timestampStr) })
- 方法2:如果对时间精度要求不高,不需要严格对齐服务端时间,可直接用本地时间生成
// 本地生成的毫秒时间戳,可直接打印、转字符串、拼接路径 const signupTime = Date.now() console.log(signupTime.toString())
问题2:第二段代码报错原因
你直接将signupTime这个占位符对象拼入了实时数据库的路径中,数据库路径仅允许字符串、数字类型的合法字符,传入对象会直接生成非法路径,触发报错。
如果需要以时间戳作为路径节点,要先拿到真实的时间戳数值再拼接路径,参考写法:
const ref = database.ref(`/admin/vendorOrder/${vendor}/${userID}`) ref.set(admin.database.ServerValue.TIMESTAMP) .then(() => ref.once('value')) .then(snapshot => { const realTimestamp = snapshot.val() // 拿到真实数值后再拼接路径写入order return database.ref(`/admin/vendorOrder/${vendor}/${userID}/${realTimestamp}/order`).set(order) })
内容的提问来源于stack exchange,提问作者Roy Sougat
相关产品推荐
相关产品推荐

