функция узла js onWrite не работает должным образом в облачной функции Google - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть функция js этого узла, которая пытается обновить индекс Алголии после добавления / обновления / удаления к спискам узлов.

exports.indexlisting_algolia = 
    functions.database.ref('/Listings/{listingId}').onWrite((snapshot, context) => {
   const index = algolia.initIndex('Listings');
   // var firebaseObject = snapshot.data;
   var firebaseObject = snapshot.data.val();
   console.log("test ",firebaseObject)

   firebaseObject.objectID = context.params.listingId;


  return index.saveObject(firebaseObject).then(
  () => 
   snapshot.data.adminRef.parent.child('last_index_timestamp').set(
      Date.parse(event.timestamp)));
  });

это моя ошибка.

TypeError: Невозможно прочитать свойство 'val' из неопределенного at exports.indexlisting_algolia.functions.database.ref.onWrite (/user_code/index.js:807:40) на объекте. (/User_code/node_modules/firebase-functions/lib/cloud-functions.js:112:27) на следующем (родном) в /user_code/node_modules/firebase-functions/lib/cloud-functions.js:28:71 в __awaiter (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:24:12) в cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:82:36) по адресу /var/tmp/worker/worker.js:733:24 at process._tickDomainCallback (internal / process / next_tick.js: 135: 7)

строка 807 - это функция

var firebaseObject = snapshot.data.val();

что я делаю неправильно и как я могу это исправить?

1 Ответ

0 голосов
/ 07 сентября 2018

Вы используете старую версию API, предоставляемую модулем firebase-functions. Новый требует, чтобы вы приняли объект Change с атрибутами before и after в качестве первого параметра триггеров onWrite и onUpdate. Эти атрибуты будут объектами DataSnapshot. Ваш код в настоящее время ожидает DataDeltaSnapshot, который вы получили в бета-версии до полной версии 1.0. Теперь это устарело.

Об изменениях API в версии 1.0 вы можете прочитать в документации .

Также см. Документацию для триггеров базы данных для примеров.

Ваша функция должна выглядеть примерно так:

exports.indexlisting_algolia = 
    functions.database.ref('/Listings/{listingId}')
    .onWrite((change, context) => {
        const before = change.before;  // snapshot before the update
        const after = change.after;    // snapshot after the update
        const before_data = before.val();
        const afater_data = after.val();
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...