我正在使用Cloud Functions for Cloudbase,而我仍然坚持使用看似非常基本的操作。
如果有人添加帖子,则会写入/posts/
。我希望将该帖子的一部分保存在名为public-posts
或private-posts
的其他节点下,使用与初始帖子中使用的密钥相同的密钥。
我的代码看起来像这样
const functions = require('firebase-functions');
exports.copyPost = functions.database
.ref('/posts/{pushId}')
.onWrite(event => {
const post = event.data.val();
const smallPost = (({ name, descr }) => ({ name, descr }))(post);
if (post.isPublic) {
return functions.database.ref('/public-posts/' + event.params.pushId)
.set(smallPost);
} else {
return functions.database.ref('/private-posts/' + event.params.pushId)
.set(smallPost);
}
})
我得到的错误信息是: functions.database.ref(...)。set不是函数。
我做错了什么?
答案 0 :(得分:3)
如果要在数据库触发器中对数据库进行更改,则必须使用Admin SDK,或使用您在事件中给出的引用查找对相关节点的引用。 (您无法使用functions.database
查找用于注册触发器的引用。
最简单的事情可能是使用event.data.ref
(doc)来查找您要写入的位置的引用:
const root = event.data.ref.root
const pubPost = root.child('public-posts')