我正在开发Firebase云功能。当我记录change.after.val()的值时,我得到一个键值对的打印输出
{ DCBPUTBPT5haNaMvMZRNEpOAWXf3: 'https://m.youtube.com/watch?v=t-7mQhSZRgM' }
而不仅仅是值(URL)。这是我的代码。我不了解.val()?不应该“更新”只包含URL?
exports.fanOutLink = functions.database.ref('/userLink').onWrite((change, context) => {
const updated = change.after.val();
console.log(updated);
return null
});
答案 0 :(得分:3)
如果您只想要URL值,则应在URL键的触发路径中包含通配符:
exports.fanOutLink = functions.database.ref('/userLink/{keyId}').onWrite((change, context) => {
console.log('keyId=', context.params.keyId);
const updated = change.after.val();
console.log(updated);
return null
});
在实时数据库中,数据为modeled as a JSON tree。事件触发器中指定的路径标识树中的节点。作为JSON的节点的值包括所有子节点。触发事件的change参数是指整个节点的值。
我在上面指出,您可以更改触发路径以引用一个级别。另一种方法是使用DataSnapshot
的{{3}}方法访问节点的子节点。
在不了解您的用例的情况下,您应该更加具体地了解应该使用的触发事件路径。请记住,当节点值的任何元素发生更改时,事件将触发,无论是根级别的简单值还是子节点的值。通常情况下,您希望触发器尽可能具体,以便更好地识别已更改的内容。那条路径中的通配符很有用。正如我在发布的代码中所示,可以从context
参数获得通配符的字符串值。