web-dev-qa-db-ja.com

AdminSDKはFirestoreの設定を行うことができません

だから、私は最近この警告を受けています:

Firestoreに保存されているDateオブジェクトの動作が変更され、アプリが破損する可能性があります。この警告を非表示にしてアプリが壊れないようにするには、他のCloud Firestoreメソッドを呼び出す前に、次のコードをアプリに追加する必要があります。

_const firestore = new Firestore();
const settings = {/* your settings... */ timestampsInSnapshots: true};
firestore.settings(settings);
_

この変更により、Cloud Firestoreに保存されているタイムスタンプは、システムのDateオブジェクトではなく、FirebaseTimestampオブジェクトとして読み戻されます。したがって、代わりにタイムスタンプを期待する日付を期待するコードも更新する必要があります。例えば:

_// Old:
const date = snapshot.get('created_at');
// New:
const timestamp = snapshot.get('created_at');
const date = timestamp.toDate();
_

新しい動作を有効にするときは、Dateの既存の使用法をすべて監査してください。将来のリリースでは、動作が新しい動作に変更されるため、これらの手順に従わないと、アプリが破損する可能性があります。

私が行っていることのほとんどはそこで行われているため、CloudFunctionsコードのadminSDKで提案された修正を実装しようとしています。

admin.firestore().settings({ timestampsInSnapshots: true })を使用しようとしましたが、次の警告が表示されました。

admin.firestore(...)。settingsは関数ではありません

どうすれば解決できますか?

10
rgoncalv

私も同じ問題を抱えていました。 firebase-functionsとfirebase-adminを更新する必要がありました。

アップグレードするには、CLIに移動してから

ProjectDirectory > Functions > npm install firebase-functions@latest firebase-admin@latest --save

次に、上部で、関数をトリガーする前に:

const firestore = admin.firestore();
const settings = {timestampsInSnapshots: true};
firestore.settings(settings);
13
Jeff Padgett

「Firestore.settings()はすでに呼び出されています」エラーを防ぐには、次のように変更します。

db.settings(settings);

try{ db.settings(settings); }catch(e){}
6
Marcus Rogers

私は解決しました:

const settings = { timestampsInSnapshots: true };
const db = admin.firestore();
db.settings(settings);
db.collection('any');
0
akilinomendez