如何使用.onWrite或onchange将Cloud Functions for Firebase的新旧价值进行比较?

时间:2017-04-13 17:40:00

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

让我们采用以下数据结构:

Datastructure

现在我想用Firebase功能刷新accessTokenFacebook。 我测试了两个选项:

  1. onWrite和:
  2. onChanged
  3. onWrite对我来说是最好的,但具有以下功能:

    exports.getFacebookAccessTokenOnchange = functions.database.ref('/users/{uid}/userAccountInfo/lastLogin').onWrite(event => {
      const lastLogin = event.data;
      let dateObject = new Date();
      let currentDate = dateObject.toUTCString();
    
      return lastLogin.ref.parent.parent.child('services').child('facebook').update({'accessTokenFacebook': currentDate});
    
    });
    
    发生了一些事情我不明白/可以解决:当我删除整个userUID记录(用于清理)时,userUID-record会自动创建,然后只使用以下路径{uid} / services / facebood / accesTokenFacebook ...

    似乎删除也会触发onWrite。

    我也尝试过.onchange,但只有在没有accessTokenFacebook时才会触发。当更改生成此更改时,更改永远不会再次触发。

    所以我要做的下一件事是新旧价值之间的比较。你有一个例子吗?或者有更好的解决方案吗?

2 个答案:

答案 0 :(得分:10)

<强>更新 Cloud Functions最近引入了对API的更改here

现在(&gt; = v1.0.0)

exports.dbWrite = functions.database.ref('/path').onWrite((change, context) => {
  const beforeData = change.before.val(); // data before the write
  const afterData = change.after.val(); // data after the write
});

之前(&lt; = v0.9.1)

exports.dbWrite = functions.database.ref('/path').onWrite((event) => {
  const beforeData = event.data.previous.val(); // data before the write
  const afterData = event.data.val(); // data after the write
});

答案 1 :(得分:1)

现在不建议使用这些功能,这是该主题的第一搜索结果,这是Cloud Functions现在使用的新更新版本。

exports.yourFunction = functions.database.ref('/path/{randomPath}/goes/here').onWrite((change, context) => {
    // Your value after the write
    const newVal = change.after.val();
    // Your value before the write
    const oldVal = change.before.val();
});