React Native 客户端和管理节点服务器上的 FirebaseFirestore.Timestamp 与 firebase.firestore.Timestamp

Posted

技术标签:

【中文标题】React Native 客户端和管理节点服务器上的 FirebaseFirestore.Timestamp 与 firebase.firestore.Timestamp【英文标题】:FirebaseFirestore.Timestamp vs firebase.firestore.Timestamp on React Native client and Admin Node server 【发布时间】:2020-12-23 22:54:21 【问题描述】:

我正在尝试解决一个看起来应该很容易解决的问题,但我在文档中找不到任何关于它的内容,而且似乎没有任何关于它的问题。

我正在使用 React Native 构建一个应用程序,我们在其中创建与应用程序相关的各种文档,并将这些文档发送到运行快速服务器的 Firebase 函数,该服务器使用 node@10 的 Admin SDK 连接到 Firestore。我的问题是试图找到一些明智的方式来表示日期,而不必每次都来回转换所有内容,因为我的文档/子文档中有很多日期字段。我在这里用import * as firebase from firebasefirebase.initializeApp(...config)初始化了react native firebase连接。此库的 Timestamp 对象的类型为 firebase.firestore.Timestamp。同时,在我的服务器上,我使用import * as admin from 'firebase-admin'admin.initializeApp(credential, ...config) 进行初始化。这里,Timestamp 的类型是 FirebaseFirestore.Timestamp,并且来自 google-api 库,而不是 firestore 库。然后,当我将具有这种类型的对象从服务器发送到客户端时,或者相反,打字稿编译失败,因为这两种类型不兼容。

我最近的尝试是使用 Date 对象,但是当我将其发送到 Firestore 时,它​​会自动将其转换为 FirebaseFirestore.Timestamp 对象,这让我回到了我最初的问题,即不想在我对每个对象进行类型检查之前手动转换它(在 REST API 的每一端)。

关于如何解决此问题的任何提示或提示?我知道我在这里没有可重现的示例,但我并不认为需要它,因为它更多的是类型问题而不是实际编程。

感谢您的帮助!

(我也不能用@firebase/testinginitializeTestApp()因为这个,因为FirebaseFirestore.Firestore和firebase.firestore.Firestore是两种不同的类型,不知道是不是属于同一类错误就像这个。)

【问题讨论】:

"关于如何解决此问题的任何提示或提示?" - 我认为没有任何问题。时间戳按预期工作。并且客户端和服务器库的 API 是不同的,这没关系。这里真正的问题是什么?您是否不希望在客户端和服务器上都按照设计使用本机时间戳类型? 如果没有问题,我真的很高兴,但是这两种类型不重叠(据我所知)。因此,当我在客户端创建时间戳时,它会破坏服务器,因为类型不适合,反之亦然。我应该能够在客户端上创建一个时间戳,对吧? @DougStevenson 我认为您将不得不编辑问题以用代码和具体观察来说明。究竟什么是“破”?我编写了很多代码来使用 web 和 node 从客户端和服务器读取和写入时间戳。它总是有效的。我不希望客户端和服务器 API 重叠。它们是不同的,但它们都可以很好地处理时间戳。你可能做错了什么。 这是我第一次使用 Firestore 进行构建,所以我确定有问题。我将研究一个示例并返回它。 @XBullet123 很好,您能否分享一下您是如何解决此问题的?通过这种方式,您可以帮助更多有相同情况的人 【参考方案1】:

这个问题的答案就像我希望的那样简单(害怕)。我只是在一个单独的地方定义了我的接口,并希望这些类型能够合作,但相反,我需要为Timestamp 的不同类型声明两个单独的接口:

客户端:

TimestampedValue.ts

import * as firebase from 'firebase';
export interface TimestampedValue 
    value: string;
    time: firebase.firestore.Timestamp;

服务器端: Timestampedvalue.ts

import * as admin from 'firebase-admin';
export interface TimestampedValue 
    value: string;
    time: admin.firestore.Timestamp;

这至少对我有帮助!

【讨论】:

以上是关于React Native 客户端和管理节点服务器上的 FirebaseFirestore.Timestamp 与 firebase.firestore.Timestamp的主要内容,如果未能解决你的问题,请参考以下文章

React Native 未在 localhost 上运行

在 iOS 设备上运行 clubbed swift 和 react-native 项目时出错

React Native集成CodePush热更新

Socket io客户端在react-native应用程序中不断断开和重新连接

React Native:在推送通知上禁用声音/振动

开源周刊第37期:React Native 简单教程