我在这里阅读了Firebase文档,但无济于事。有谁知道在哪里可以找到有关Firebase实时数据库的Firebase云功能Typescript的教程?
export const onPostApprovedUpdate = functions.database.ref('/Qpon/{country}/{city}/{nodeID}/PostApproved').onUpdate((change, context) => {
const getCountry = context.params.country
const getCity = context.params.city
const getNode = context.params.nodeID
const y = change.after.val()
if (y == "true") {
}
return null
});
它假设将companyName的值更改为数据库的数据,但是它打印出companyName的值和companyKey的值为“ XXX”
答案 0 :(得分:3)
从实时数据库触发Cloud Function时,您将在触发点获得数据快照。由于您是在/Qpon/{country}/{city}/{nodeID}/PostApproved
上触发的,因此只能得到PostApproved
的值。
要获取Name
属性的值,您有两个选择:
在单独的调用中从数据库中加载其他数据。
在数据库中向上一级触发:/Qpon/{country}/{city}/{nodeID}
。
通过在/Qpon/{country}/{city}/{nodeID}
上触发,您可以直接在change
参数中获得所有需要的数据。问题在于,onUpdate
也会同时触发对其他属性的更改,因此您需要检查该属性是否确实被更改:
export const onPostApprovedUpdate = functions.database.ref('/Qpon/{country}/{city}/{nodeID}').onUpdate((change, context) => {
const getCountry = context.params.country
const getCity = context.params.city
const getNode = context.params.nodeID
const before = change.before.child("PostApproved").val()
const y = change.after.child("PostApproved").val()
if (before !== y && y == "true") {
let name = change.after.child("Name").val();
...
}
return null
});
要在单独的调用中加载其他数据,可以从快照中获取ref.parent
并使用它来触发其他加载。当然,这需要额外的往返,但是最终将下载更少的数据:
export const onPostApprovedUpdate = functions.database.ref('/Qpon/{country}/{city}/{nodeID}/PostApproved').onUpdate((change, context) => {
const getCountry = context.params.country
const getCity = context.params.city
const getNode = context.params.nodeID
const y = change.after.val()
if (y == "true") {
const parentRef = change.after.ref.parent;
return parentRef.child("Name").once("value").then((nameSnapshot) {
let name = nameSnapshot.val();
...
});
}
else {
return null
}
});