节点js函数onWrite在Google Cloud函数中无法正常工作

时间:2018-09-06 23:25:30

标签: node.js firebase google-cloud-functions

我有这个节点js函数,一旦对节点列表进行添加/更新/删除,便会尝试更新Algolia索引

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”       在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       在process._tickDomainCallback(internal / process / next_tick.js:135:7)

第807行是此功能

var firebaseObject = snapshot.data.val();

我做错了什么,该如何解决?

1 个答案:

答案 0 :(得分:1)

您正在使用firebase-functions模块公开的API的旧版本。新的要求您接受具有beforeafter属性的Change对象,作为onWrite和onUpdate触发器的第一个参数。这些属性将是DataSnapshot对象。您的代码当前期望使用DataDeltaSnapshot,这是您在完整1.0版本之前的beta版本中获得的内容。现在已弃用。

您可以阅读有关API changes in version 1.0 in the documentation的信息。

还请参见documentation for database triggers以获取示例。

您的函数应如下所示:

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();
    })