Admin SDK не может установить параметры для Firestore
Итак, недавно я получил это предупреждение:
поведение для объектов даты, хранящихся в Firestore, изменится И ВАШЕ ПРИЛОЖЕНИЕ МОЖЕТ СЛОМАТЬСЯ. Чтобы скрыть это предупреждение и убедиться, что приложение не сломается, необходимо добавить следующий код для вашего приложения перед вызовом любых других методов Cloud Firestore:
const firestore = new Firestore();
const settings = {/* your settings... */ timestampsInSnapshots: true};
firestore.settings(settings);
С этим изменением будут считываться метки времени, хранящиеся в Cloud Firestore назад как объекты метки времени Firebase объектов as system Date. Поэтому вам также нужно будет обновить код, ожидая вместо этого дату ожидать метку. Например:
// Old:
const date = snapshot.get('created_at');
// New:
const timestamp = snapshot.get('created_at');
const date = timestamp.toDate();
пожалуйста проверите все существующие использования даты когда вы включаете новое поведение. В будущем выпуске поведение изменится на новое поведение, поэтому, если вы не выполните эти действия, ваше приложение может сломаться.
Я пытаюсь реализовать предлагаемое исправление в admin SDK в моих облачных функциях код, поскольку большая часть того, что я делаю, находится там.
Я попытался с помощью admin.firestore().settings({ timestampsInSnapshots: true })
, но получил следующее предупреждение:
админ.firestore(...).настройки не является функцией
как мне его решить?
3 ответов
у меня была та же проблема. Мне пришлось обновить firebase-функции и 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);
для предотвращения "Firestore.settings () уже был вызван" error, change
db.settings(settings);
to
try{ db.settings(settings); }catch(e){}
Я решил с:
const settings = { timestampsInSnapshots: true };
const db = admin.firestore();
db.settings(settings);
db.collection('any');