让我们采用以下数据结构:
现在我想用Firebase功能刷新accessTokenFacebook。 我测试了两个选项:
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时才会触发。当更改生成此更改时,更改永远不会再次触发。
所以我要做的下一件事是新旧价值之间的比较。你有一个例子吗?或者有更好的解决方案吗?
答案 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();
});