如何使用 Firebase-admin 为 NodeJs 设置 timestampsInSnapshots 设置?

Posted

技术标签:

【中文标题】如何使用 Firebase-admin 为 NodeJs 设置 timestampsInSnapshots 设置?【英文标题】:How to set timestampsInSnapshots setting with firebase-admin for NodeJs? 【发布时间】:2018-11-20 18:43:50 【问题描述】:

由于有关 Firestore 中时间戳行为即将发生变化的警告,我正在尝试更改我的应用的初始化代码。

存储在 Firestore 中的 Date 对象的行为将会改变 您的应用程序可能会中断。隐藏此警告并确保您的应用确实如此 不中断,您需要先将以下代码添加到您的应用程序中 调用任何其他 Cloud Firestore 方法:

const firestore = firebase.firestore(); const settings = / 你的 设置... / timestampsInSnapshots: true; firestore.settings(设置);

通过此更改,将读取存储在 Cloud Firestore 中的时间戳 返回为 Firebase Timestamp 对象,而不是系统 Date 对象。

不过,我找不到对 firestore“设置”的任何引用。像这样的东西会起作用吗? Typescript 定义说不...

import * as admin from "firebase-admin";

export const adminApp = admin.initializeApp();

const firestore = admin.firestore(adminApp);
firestore.settings( timestampsInSnapshots: true );

【问题讨论】:

"时间戳在管理 SDK 中尚不存在。他们正在处理它。" ~ @codingdoug(在 Firebase Slack 上) 那为什么会出现警告呢? 出现警告是因为我还在后端代码中使用了客户端库。总的来说,我认为如果您在前端/客户端应用程序中看到此警告,您会认为这也与后端相关。 【参考方案1】:

我已将 firebase-admin 升级到 5.13.0,并在 initializeApp() 之后在我的 index.js 中使用以下 node.js 代码,该警告消失了,之后我的代码可以正常运行。

admin.initializeApp();
const settings = /* your settings... */ timestampsInSnapshots: true;
admin.firestore().settings(settings);

【讨论】:

谢谢。我可以确认使用更新版本现在可以使用。 Typescript 还允许 API 来自其 typedef。 如何升级 firebase-admin? @JeffPadgett npm install --save firebase-admin@latest 如果您使用initializeApp 的结果(例如const app = admin.initializeApp(/* ... */);),您可以使用其结果(例如app.firestore().settings(setting))编写设置。 firebase.google.com/docs/reference/admin/node/admin.app.App 应用设置会使生成的 db 变为 void 而不是 Firestore 类型。这是预期的行为吗?

以上是关于如何使用 Firebase-admin 为 NodeJs 设置 timestampsInSnapshots 设置?的主要内容,如果未能解决你的问题,请参考以下文章

如何忽略“firebase-admin 似乎已安装在不受支持的环境中。”?

如何使用 Typescript 从 firebase-admin 导入 FieldValue?

导出 Firestore 备份数据的云功能。使用 firebase-admin 或 @google-cloud/firestore?

Firebase 的云功能 - 即使我正在为 firebase-admin 功能发出出站 http 请求,也会出现网络错误

使用 firebase-admin。服务帐户凭据有啥用途?

firebase 云功能中带有 typescript 的 firebase-admin