如何将JS日期对象传递给云函数,以便将其存储在Firestore上



当我将Date对象写入我的Firestore时,所有对象都能正常工作,并且我可以在DB中看到存储类型为";时间戳";。如果我试图将Date对象传递给云函数,我不知道为什么,但当我将其从云函数存储到firestore DB时,它是一个空对象。

firebase.functions().httpsCallable("myFunction")({date: new Date()}) <---- // this doesn't work

因此,我决定在将Date对象发送到云函数之前,在客户端将其转换为firestore时间戳。如下:

date = firebase.firestore.Timestamp.fromDate(date);
firebase.functions().httpsCallable("myFunction")({date})

然后,如果我把它放在云函数中并存储在我的火库中,我会看到一个带有字段"的对象;秒";以及";纳秒";,但不是时间戳(我的意思是它不是用时间戳类型存储的(。。。因此,当我得到这个日期时,我无法应用.toDate((方法

在这种情况下,有没有什么好的方法可以将日期存储为时间戳而不是对象?

可调用函数的输入和输出完全处理JSON,因此它们仅限于表示JSON中允许的类型:字符串、数字、布尔值、null、对象、数组。日期和时间戳不属于这些类型。Firebase SDK将尝试将自定义对象序列化为JSON,但这并不是你想要的方式——时间戳的秒和纳米字段在序列化过程中被拆分。

如果你有一个日期要从客户端发送,你应该只把它作为一个数字发送。与其传递Date对象,不如传递其中的单个数字(自unix epoch以来的毫秒数(:

const number = date.getTime()

在接收端,在云功能中,取数字并将其转换回日期:

const date = new Date(number)

然后可以将Date对象写入Firestore文档字段。

相关内容

  • 没有找到相关文章

最新更新