web-dev-qa-db-fra.com

Le SDK administrateur ne peut pas définir de paramètres pour Firestore

Donc, je reçois cet avertissement récemment:

Le comportement des objets Date stockés dans Firestore va changer ET VOTRE APP PEUT BRISER . Pour masquer cet avertissement et vous assurer que votre application ne se casse pas, vous devez ajouter le code suivant à votre application avant d’appeler une autre méthode Cloud Firestore:

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

Avec cette modification, les horodatages stockés dans Cloud Firestore seront lus Retour en tant qu'objets Firebase Timestamp au lieu d'objets Date système . Il vous faudra donc également mettre à jour le code en prévoyant une Date. attendre un horodatage. Par exemple:

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

Veuillez auditer toutes les utilisations existantes de Date lorsque vous activez le nouveau fichier comportement. Dans une version ultérieure, le comportement passera à la nouvelle comportement, donc si vous ne suivez pas ces étapes, votre application peut s’interrompre.

J'essaie d'implémenter la correction suggérée dans le SDK d'administration dans le code de mes fonctions de cloud, car l'essentiel de ce que je fais se fait par là.

J'ai essayé d'utiliser admin.firestore().settings({ timestampsInSnapshots: true }) mais j'ai eu l'avertissement suivant:

admin.firestore (...). settings n'est pas une fonction

Comment puis-je le résoudre?

9
rgoncalv

J'ai eu le même problème. Je devais mettre à jour les fonctions firebase et firebase-admin. 

Pour mettre à niveau, allez dans votre CLI, puis 

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

Puis, en haut, avant de déclencher des fonctions:

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

Pour empêcher le "Firestore.settings () a déjà été appelé" erreur, changez

db.settings(settings);

à

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

j'ai résolu avec:

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