Firebase change.after.val()返回完整的JSON对象,而不是对象的值
我正在研究Firebase云函数。当我记录change.after.val()的值时,我会得到一个键值对的打印输出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
{ 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,我会得到一个错误。