Как автоматически удалять сообщения на firebase - PullRequest
0 голосов
/ 15 апреля 2019

Я новичок в облачных функциях Firebase.Как я могу автоматически удалять сообщения в базе данных реального времени через определенное время?Например, 1 минута, 1 день и т. Д.

Я пытаюсь использовать образец, доступный здесь (https://github.com/firebase/functions-samples/tree/master/delete-old-child-nodes), и получаю следующую ошибку после использования команды развертывания firebase:

i deploying functions Running command: npm --prefix "$RESOURCE_DIR" run lint

functions@ lint /home/vitor/remove_msgs_teste/functions eslint .

/home/vitor/remove_msgs_teste/functions/index.js 29:111 error Parsing error: Unexpected token =>

✖ 1 problem (1 error, 0 warnings)

npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! functions@ lint: eslint . npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the functions@ lint script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in: npm ERR! /home/vitor/.npm/_logs/2019-04-15T12_51_56_231Z-debug.log

Error: functions predeploy error: Command terminated with non-zero exit code1

Мой index.js:

'use strict';

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

// Cut off time. Child nodes older than this will be deleted.
const CUT_OFF_TIME = 30000; // 30sec in milliseconds.

/**
 * This database triggered function will check for child nodes that are older than the
 * cut-off time. Each child needs to have a `timestamp` attribute.
 */
exports.deleteOldItems = functions.database.ref('/mensagens/{idone}/{idtwo}/{pushid}').onWrite(async (change) => {
  const ref = change.after.ref.parent; // reference to the parent
  const now = Date.now();
  const cutoff = now - CUT_OFF_TIME;
  const oldItemsQuery = ref.orderByChild('timestamp').endAt(cutoff);
  const snapshot = await oldItemsQuery.once('value');
  // create a map with all children that need to be removed
  const updates = {};
  snapshot.forEach(child => {
    updates[child.key] = null;
  });
  // execute all updates in one go and return the result to end the function
  return ref.update(updates);
});

Моя база данных:

enter image description here

Как решить эту ошибку?

1 Ответ

2 голосов
/ 15 апреля 2019

Похоже, вы пытаетесь развернуть код, который требует Node 8 (поскольку он использует нотацию =>) в среде, которая его не поддерживает.

Решение состоит в том, чтобы обновить среду доузел поддержки 8. Альтернативой является изменение кода, чтобы он больше не требовал узла 8, что можно сделать с помощью:

exports.deleteOldItems = functions.database.ref('/mensagens/{idone}/{idtwo}/{pushid}').onWrite(function(change) {
  var ref = change.after.ref.parent; // reference to the parent
  var now = Date.now();
  var cutoff = now - CUT_OFF_TIME;
  var oldItemsQuery = ref.orderByChild('timestamp').endAt(cutoff);
  return oldItemsQuery.once('value').then(function(snapshot) {
    // create a map with all children that need to be removed
    var updates = {};
    snapshot.forEach(function(child) {
      updates[child.key] = null;
    });
    // execute all updates in one go and return the result to end the function
    return ref.update(updates);
  });
});

Этот тип перезаписи довольно распространен в современном JavaScript, поэтому я предполагаю,ты новичок в этом.Если вы новичок в JavaScript, облачные функции для Firebase - не лучший способ изучить его.Я рекомендую сначала прочитать документацию Firebase для веб-разработчиков и / или взять кодовую метку Firebase для веб-разработчиков .Они охватывают многие основные взаимодействия JavaScript, Web и Firebase.Вы также можете использовать Admin SDK в локальном процессе Node.js, который можно отлаживать с помощью локального отладчика.После этого вы будете гораздо лучше подготовлены к написанию кода и для облачных функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...