Удалить элемент после даты (функция Firebase Cloud) - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь написать облачную функцию firebase для автоматического удаления события после того, как дата пройдена.

Основываясь на этом примере Пример Firebase , я пришел к этому, но когда я загружаю его на Firebase, он работает на стороне Firebase, но не удаляет события.

У вас, ребята, есть советы или что-то не так в моем коде? Возможно ли, что проблема может исходить от триггера onWrite()?

/* My database structure

   /events
                item1: {
                    MyTimestamp: 1497911193083
                },
                item2: {
                    MyTimestamp: 1597911193083                    
                }
                ...
*/


// Cloud function to delete events after the date is passed

'use strict';

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.deleteOldItems = functions.database.ref('/events/{eventId}').onWrite((change) => {
  
  const ref = change.after.ref.parent; // reference to the parent
  const now = Date.now();
  const oldItemsQuery = ref.orderByChild('MyTimestamp').endAt(now);

  return oldItemsQuery.once('value').then((snapshot) => {
    // create a map with all children that need to be removed
    const updates = {};
    	snapshot.forEach(child => {
      		updates[child.key] = null;
    	});
    return ref.update(updates);
    // execute all updates in one go and return the result to end the function
  });
});

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

В коде нет ничего плохого, просто обновите облачные функции и администратор:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.deleteOldItems = functions.database.ref("/events/{eventId}").onWrite((change, context) => {
  if (change.after.exists() && !change.before.exists()) {
    const ref = change.after.ref.parent;
    const now = Date.now();
    const oldItemsQuery = ref.orderByChild('MyTimestamp').endAt(now);
    return oldItemsQuery.once('value').then((snapshot) => {
      const updates = {};
      snapshot.forEach(child => {
        updates[child.key] = null;
      });
      return ref.update(updates);
    });
  } else {
    return null;
  }
});

Запустите следующее в папке функций:

npm install firebase-functions@latest --save npm install firebase-admin@5.11.0 --save

Ссылка здесь для более подробной информации

0 голосов
/ 02 июля 2018

попробуй изменить

 admin.initializeApp();

до:

admin.initializeApp(functions.config().firebase);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...