【问题标题】:Sending firebase database data to client through cloud function通过云功能将firebase数据库数据发送到客户端
【发布时间】:2021-01-17 01:50:49
【问题描述】:

我正在尝试通过云功能将数据从我的 firebase 数据库发送回我的客户端。我想返回整个 json 子对象。这是我的云功能的代码:

exports.addNumbers = functions.https.onCall((data, context) => {
 admin.database().ref('store/ingredients').once('value', function(snapshot) {
    
    return snapshot.val();

  });

});

这是调用此云函数并访问其数据的客户端代码:

const addNumbers = firebase.functions().httpsCallable('addNumbers');
  addNumbers().then(result => {
    console.log(result.data + "in client");
  });

但是在客户端返回的数据是空的,并且云函数在 firebase 日志中只返回对象 [Object]。请有人帮助我。

【问题讨论】:

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


    【解决方案1】:

    你快到了。您只需从 Cloud Function 中的顶级代码返回一些内容。

    最简单的方法是使用then 子句:

    exports.addNumbers = functions.https.onCall((data, context) => {
      return admin.database().ref('store/ingredients').once('value').then((snapshot) => {
        return snapshot.val();
      });
    });
    

    现在数据库中的值“冒泡”到调用代码,然后作为承诺从您的函数中返回。


    在现代 JavaScript 版本上,您可以使用 async/await 使这段代码更易于阅读:

    exports.addNumbers = functions.https.onCall(async (data, context) => {
      let snapshot = await admin.database().ref('store/ingredients').once('value')
      return snapshot.val();
    });
    

    这在引擎盖下的工作方式完全相同(实际上只是语法糖),但大多数开发人员发现它更容易阅读。

    【讨论】:

    • 这有点帮助,我能够得到客户端返回的数据。但是,它仍然在客户端显示为 [object Object],所以我认为这意味着它仍然无法获取嵌套在该路径下的子节点的完整 json 对象,如果我指定最里面的子节点的路径,我我得到了价值。但我想输入这个更广泛的路径并将整个 json 子作为我的返回值
    • 您可能正在获取数据,但未正确打印。试试console.log(result.data)console.log(JSON.stringify(result.data) + "in client");
    • JSON.stringify 打印了数据,有没有办法将数据保存为 JSON,以便我以后可以对其执行 JSON 操作?
    • 您已经可以:如果您从可调用的云函数返回 JSON 对象,它也会在您的客户端中显示为 JSON 对象。您只是无法按照您尝试的方式记录它,这就是我向您展示如何将其转换为字符串的原因。但是您应该已经能够获取代码中的属性,例如console.log(result.data.childProperty)
    猜你喜欢
    • 2017-10-26
    • 2014-10-11
    • 2021-11-03
    • 2019-03-31
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2019-02-23
    相关资源
    最近更新 更多