如何从 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 获取数据以进行推送通知

如何获取/设置 firebase 云函数 v1 环境变量

如何获取firebase云数据库中的字段值?

有没有办法从 Firebase 云函数中的单个函数返回 2 个值并将它们存储在数据库中的不同节点中?

如何从 firebase_auth 获取令牌