如何从 Firebase 云函数中的通配符获取数据
Posted
技术标签:
【中文标题】如何从 Firebase 云函数中的通配符获取数据【英文标题】:How to get data from wildcard in firebase cloud functions 【发布时间】:2018-06-02 00:45:53 【问题描述】:假设我在以下ref('/users/userId/items/newItem')
上触发事件
我想从通配符userId
中获取一个值
我试过var token = event.params.userId.token
,但它返回未定义
有什么建议吗?
【问题讨论】:
在您的代码 sn-p 中仅定义event.params.userId
。没有发生具有该 ID 的用户的神奇查找。如果要获取触发该功能的用户的用户对象,请参见***.com/questions/42750060/…
非常感谢,我已经尝试了这个 sn-p 代码,它工作得很好:` return admin .database() .ref(/users/$userId/token
) .once('value') 。 then(data => return admin.messaging().sendToDevice(data.val(), payload); );` 我触发了通配符 userId 的单个值以获取其令牌
那个sn-p根据userId
在数据库中查找token。但是您不能通过执行event.params.userId.token
来读取令牌,token
属性在触发函数的路径中的参数上根本不可用。
【参考方案1】:
Token
不是从trigger
事件自动返回的参数。
在触发器通配符中,仅返回与通配符直接对应的参数。所以如果你想使用,你需要做以下事情
var userId = event.params.userId
然后在函数内部你可以再创建一个Promise
return admin.database().ref(/users/userId/token).once('value').then(data =>
//do something here
)
这将帮助您获得令牌。或者,如果您想一步完成,可以尝试以下使用 userID 作为通配符。
return admin.database().ref(/users/userId/token).once('value').then(data =>
//do something here
)
但是在这里您将收到多个令牌,然后您必须遍历子代以确定哪个 userId
与您相关
【讨论】:
【参考方案2】:你可以找到这样的通配符值
wildCardValue = context.params.wildCardName
【讨论】:
【参考方案3】:在firestore中你可以使用它。
exports.getUser = functions.firestore
.document('users/userId').onWrite((change, context) =>
let userId = context.params.userId;
//...
);
【讨论】:
以上是关于如何从 Firebase 云函数中的通配符获取数据的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 函数从 Firebase DB 获取数据以进行推送通知