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');