我有这个节点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();
我做错了什么,该如何解决?
答案 0 :(得分:1)
您正在使用firebase-functions模块公开的API的旧版本。新的要求您接受具有before
和after
属性的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();
})