【问题标题】:Firebase Cloud Functions: How to push data using wildcards in http requestsFirebase Cloud Functions:如何在 http 请求中使用通配符推送数据
【发布时间】:2017-08-02 00:35:24
【问题描述】:

我正在探索 Firebase 中的新 Cloud Functions 功能,因此我知道通配符在实时数据库触发器中是如何工作的,但是当我尝试在 http 请求中添加通配符时,它会忽略通配符并将新数据推送到新的 {userId} 对象。

基本上,我正在尝试创建一个函数,该函数将从“今天”对象中的所有用户获取数据并将其推送到“昨天”对象中(类似于统计信息或流程)。为此,我使用基于 cron 示例的 this topic

我开始构建由 http 请求触发的简单函数,想法是为所有用户推送一些数据({userId} 通配符),但数据正在被推送到新的 {userId} 对象,忽略通配符。

exports.addEntry = functions.https.onRequest((req, res) => {
  const value = req.query.addValue;
  admin.database().ref('users/{userId}').push({value}).then(snapshot => {
  res.redirect(303, snapshot.ref); });
});

问题:如何让这个功能将数据推送给所有用户?

【问题讨论】:

    标签: javascript firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    在触发器中连接通配符的语法不适用于构建数据库引用的路径。在那里你必须使用常规的字符串插值:

    exports.addEntry = functions.https.onRequest((req, res) => {
      const value = req.query.addValue;
      admin.database().ref('users/'+userId).push({value}).then(snapshot => {
      res.redirect(303, snapshot.ref); });
    });
    

    或者 ES6 模板字面量:

    exports.addEntry = functions.https.onRequest((req, res) => {
      const value = req.query.addValue;
      admin.database().ref(`users/${userId}`).push({value}).then(snapshot => {
      res.redirect(303, snapshot.ref); });
    });
    

    【讨论】:

    • 谢谢,但有没有办法将数据推送到所有 useId,而不仅仅是给定的?
    • 当然。为此,请遍历用户并将相同的值推送给每个用户。
    猜你喜欢
    • 2017-09-15
    • 2019-10-06
    • 2017-11-16
    • 2019-03-18
    • 2019-05-16
    • 2018-08-13
    • 2017-09-12
    • 1970-01-01
    • 2017-10-31
    相关资源
    最近更新 更多