javascript - 错误“snapshot.val”不是 Google Cloud Functions 中的函数
问题描述
创建新节点时,我想创建相同的数据并将其推送到不同的节点。
“ins”节点是我将新数据推送到的节点:
root: {
doors: {
111111111111: {
MACaddress: "111111111111",
inRoom: "-LBMH_8KHf_N9CvLqhzU",
ins: {
// I am creating several "key: pair"s here, something like:
1525104151100: true,
1525104151183: true,
}
}
},
rooms: {
-LBMH_8KHf_N9CvLqhzU: {
ins: {
// I want it to clone the same data here:
1525104151100: true,
1525104151183: true,
}
}
}
我的功能代码如下,但它根本不起作用。当我使用onCreate触发器(这就是我所需要的)时,我什至无法启动该功能。关于如何使这项工作的任何想法?
exports.updateRoom = functions.database.ref('doors/{MACaddress}/ins')
.onCreate((snapshot, context) => {
const timestamp = snapshot.val();
const roomPushKey = functions.database.ref('doors/{MACaddress}/inRoom');
console.log(roomPushKey);
return snapshot.ref.parent.parent.child('rooms').child(roomPushKey).child('ins').set(timestamp);
});
注意:我已经修改了代码,并通过将触发器更改为onWrite来运行它,但是像这样我收到一条错误消息: “snapshot.val”不是一个函数......
exports.updateRoom = functions.database.ref('doors/{MACaddress}/ins').onWrite((snapshot, context) => {
const timestamp = snapshot.val();
const roomPushKey = functions.database.ref('doors/{MACaddress}/inRoom');
console.log(roomPushKey);
return snapshot.ref.parent.parent.child('rooms').child(roomPushKey).child('ins').set(timestamp);
});
解决方案
如果您正在使用onWrite
,则必须执行以下操作:
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
});
onWrite
当指定路径发生任何更改时使用,因此您可以检索before
更改和after
更改。
更多信息在这里:
https://firebase.google.com/docs/functions/beta-v1-diff#realtime-database
https://firebase.google.com/docs/reference/functions/functions.Change
在onCreate
中,您可以这样做:
exports.dbCreate = functions.database.ref('/path').onCreate((snap, context) => {
const createdData = snap.val(); // data that was created
});
onCreate
当您将新数据添加到数据库时触发。
推荐阅读
- firebase-realtime-database - 如何在 Firebase Recycler Adapter 中膨胀不同的布局
- python - 如何将黑白像素图像转换为文本?
- angular - Angular v6:如何根据选择值禁用 formArray 的特定 formControl?
- delphi - Delphi10.1 Berlin .. 在打开 dblookupcombobox 菜单的情况下关闭表单时出现错误
- javascript - 在 React 中插入内容后,防止关注 Expand More 按钮
- azure-active-directory - 无法通过 microsoft graph api 从头开始创建团队
- php - 升级PHP后Apache无法运行
- java - 如何使用@InjectMocks 注入相同类型的依赖项?
- python - 我想要一个新数组,其值可被 3 或 5 整除,仅使用布尔掩码
- javascript - 是否可以在模态中显示外部网页内容?(AngularJS+Bootstrap+Html+CSS)