当前位置: 首页 > 知识库问答 >
问题:

节点js函数onWrite在google cloud函数中无法正常工作

杜思远
2023-03-14

我有这个节点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:无法在对象的exports.indexlisting_algolia.functions.database.ref.onWrite(/user_code/index.js:807:40)读取未定义的属性“val”。(/user_code/node_modules/firebase functions/lib/cloud functions.js:112:27)下一个(本机)在/user_code/node-modules/firebase-functions/lab/clound-functions。js:28:71在__waiter(/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_tickDomainCallback(内部/process/next_tick.js:135:7)

第807行:这是一个函数吗

var firebaseObject = snapshot.data.val();

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

共有1个答案

吴开宇
2023-03-14

您使用的是由fire base函数模块公开的旧版本的API。新的要求您接受一个Change对象,在之前具有,在之后具有属性,作为onWrit和onUpdate触发器的第一个参数。这些属性将是DataSnapshot对象。您的代码当前需要一个DataDeltaSnapshot,这是您在完整1.0版本之前的beta版本中获得的。现在已弃用。

您可以在文档中阅读有关版本 1.0 中的 API 更改的信息。

有关示例,请参见数据库触发器的文档。

您的函数应该看起来更像这样:

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

 类似资料:
  • 问题内容: 以下是我的脚本: 它显示以下错误: 我该如何处理? 谢谢 问题答案: 我已经安装了SSH2 PECL扩展程序,它的工作正常,谢谢大家的帮助…

  • 我的自定义模块具有以下代码: 如果在我的模块外调用函数,效果很好,但是如果在模块内调用,则在运行时出现错误: (节点: 24372)UnhandledPromiseRejse警告:未处理的promise拒绝(拒绝id: 1):引用错误:未定义PrintNearestStore 当我将语法更改为: 它开始在模块内正常工作,但在模块外失败-我得到了错误: (节点: 32422)UnhandledPro

  • 我在Windows10x86 64位计算机上运行Netbeans 8.1,我已经完成了项目的运行 这里是输出: 3 输入金额:含税:3.15美元 运行成功(总时间:4s) 如您所见,扫描功能在程序甚至打印“输入金额:”之前读取数字。另外,在我注释掉scanf函数之后,它按预期打印了两条printf语句。我已经努力解决这个问题一段时间了,非常感谢您的帮助,谢谢!

  • 问题内容: 我试图动态地保存具有不同颜色的编辑文本,但是当我通过将其转换为HTML形式进行保存时,它只会将文本保存为一种颜色,而不是我选择的颜色。 这是Textchanged,str是可扩展文本。 问题答案: 在文本更改后尝试此操作,它将解决您的问题。

  • 所以我有一段代码: }; 我想去掉getInnerHtml函数。我目前已经剔除了driver.findElement和webdriver。By.css函数。我的driver.findElement函数返回一个我使用节点模块sinon-stub-promise的promise。 然而,当运行测试时,我不确定如何存根.getInnerHtml函数,我得到一个错误: 我试图改变driver.findEl