我在 'pojo' 节点上放置了触发器,每当发生一些变化时,它就会被触发。我可以访问它的孩子,但如何访问以下位置?
此位置的值:
/XVbW8ED5DmTUerEYZZykp1GN2TO2/deviceToken
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.ok = functions.database.ref("/{uid}/messages/{key}/pojo")
.onWrite(event => {
var snap = event.data;
var b = snap.child("admin").val();
}
触发数据库函数时,Cloud Functions 会从触发点向下传递数据。要从数据库中的另一个位置获取任何数据,您需要在代码中读取该数据。
event.data.ref
所以如果你有一个兄弟姐妹admin
:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.ok=functions.database.ref("/{uid}/messages/{key}/pojo")
.onWrite(event =>{
var snap = event.data;
return snap.ref.parent.child("admin").once("value").then((adminSnapshot) {
var adminVal = adminSnapshot.val();
// TODO: do something with the adminVal and return a value or a promise
});
}
要从完全不相关的路径读取值,您有两种选择:
event.data.ref.root
或event.data.adminRef.root
。event.data.ref.root
或event.data.adminRef.root
您还可以使用event.data.ref.root
或开始从根构建路径event.data.adminRef.root
。这两个选项的区别在于event.data.ref
,与触发函数的用户具有相同的访问权限,同时event.data.adminRef
具有对整个数据库的完全访问权限。
一个简单的例子是说您有一个admin
要访问的全局节点:
exports.ok=functions.database.ref("/{uid}/messages/{key}/pojo")
.onWrite(event =>{
var root = event.data.ref.root;
return root.child("admin").once("value").then((adminSnapshot) {
var adminVal = adminSnapshot.val();
// TODO: do something with the adminVal and return a value or a promise
});
}
或者,您可以从 Admin SDK 开始,它已包含在您的代码段中:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.ok=functions.database.ref("/{uid}/messages/{key}/pojo")
.onWrite(event =>{
var snap = event.data;
admin.database().ref('XVbW8ED5DmTUerEYZZykp1GN2TO2/deviceToken').once("value").then(function(tokenSnapshot) {
var deviceToken = tokenSnapshot.val();
});
}
最后一种方法也适用于其他触发器类型,例如在 HTTP 触发函数中。由于这些函数没有get event.data.ref
,因此 Admin SDK 是您唯一的选择。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句