change.after.val()返回完整的JSON对象而不是对象的值

时间:2018-05-10 01:56:04

标签: firebase firebase-realtime-database google-cloud-functions

我正在开发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

});

1 个答案:

答案 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参数获得通配符的字符串值。