Admin SDK无法为Firestore设置设置

rgo*_*alv 10 javascript firebase google-admin-sdk google-cloud-functions google-cloud-firestore

所以,我最近收到了这个警告:

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

const firestore = new Firestore();
const settings = {/* your settings... */ timestampsInSnapshots: true};
firestore.settings(settings);
Run Code Online (Sandbox Code Playgroud)

通过此更改,存储在Cloud Firestore中的时间戳将作为Firebase Timestamp对象而不是系统Date对象读回.因此,您还需要更新期望日期的代码,而不是期望时间戳.例如:

// Old:
const date = snapshot.get('created_at');
// New:
const timestamp = snapshot.get('created_at');
const date = timestamp.toDate();
Run Code Online (Sandbox Code Playgroud)

启用新行为时,请审核Date的所有现有用法.在将来的版本中,行为将更改为新行为,因此如果您不按照这些步骤操作,您的应用程序可能会突然发生.

我正在尝试在我的云功能代码中的管理SDK中实现建议的更正,因为我正在做的大部分工作都在那里.

我尝试使用admin.firestore().settings({ timestampsInSnapshots: true })但得到以下警告:

admin.firestore(...).settings不是一个函数

我该如何解决?

Jef*_*ett 13

我有同样的问题.我不得不更新firebase-functions和firebase-admin.

要升级,请转到CLI

ProjectDirectory > Functions > npm install firebase-functions@latest firebase-admin@latest --save
Run Code Online (Sandbox Code Playgroud)

然后,在触发功能之前,在顶部:

const firestore = admin.firestore();
const settings = {timestampsInSnapshots: true};
firestore.settings(settings);
Run Code Online (Sandbox Code Playgroud)


小智 6

为防止出现“ Firestore.settings()已被调用”错误,请进行更改

db.settings(settings);
Run Code Online (Sandbox Code Playgroud)

try{ db.settings(settings); }catch(e){}
Run Code Online (Sandbox Code Playgroud)