在Cloud Functions for Firebase中将对象从一个节点复制到另一个节点

时间:2017-08-31 11:03:32

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

我正在使用Cloud Functions for Cloudbase,而我仍然坚持使用看似非常基本的操作。

如果有人添加帖子,则会写入/posts/。我希望将该帖子的一部分保存在名为public-postsprivate-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不是函数

我做错了什么?

1 个答案:

答案 0 :(得分:3)

如果要在数据库触发器中对数据库进行更改,则必须使用Admin SDK,或使用您在事件中给出的引用查找对相关节点的引用。 (您无法使用functions.database查找用于注册触发器的引用。

最简单的事情可能是使用event.data.refdoc)来查找您要写入的位置的引用:

const root = event.data.ref.root
const pubPost = root.child('public-posts')