Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase change.after.val()返回完整的JSON对象,而不是对象的值_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

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

Firebase change.after.val()返回完整的JSON对象,而不是对象的值,firebase,firebase-realtime-database,google-cloud-functions,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').onWri

我正在研究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

});

如果只需要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
});
在实时数据库中,数据是。事件触发器中指定的路径标识树中的节点。节点的值为JSON,包括所有子节点。触发器事件的更改参数引用整个节点的值

我在上面指出,您可以更改触发器路径,使其向下引用一级。另一种方法是使用
DataSnapshot
的方法访问节点的子节点


在不了解用例的情况下,很难更具体地说明应该使用的触发器事件路径。请记住,当节点值的任何元素发生更改时,无论是根级别的简单值还是子节点的值,都会触发事件。通常情况下,您希望触发器尽可能具体,以便更好地识别更改的内容。这就是路径中的通配符很有用的地方。正如我在发布的代码中所示,通配符的字符串值可以从
上下文
参数中获得。

非常感谢。我模模糊糊地理解为什么会出现这种情况,但你能澄清一点原因吗?@LuciusDeger:我更新了我的答案以提供更多解释。我如何访问更改中的对象的值。after.val()???如果我不更改cont valueOfKey=change.after.val().status,我会得到一个错误。