【问题标题】:Use other references value from firebase realtime trigger functions使用来自 firebase 实时触发函数的其他参考值
【发布时间】:2017-08-09 12:00:03
【问题描述】:

您好,我开始使用 firebase 函数向我的 android 应用程序添加一些后端逻辑我想使用一些不同于事件数据值的值

exports.makeUppercase = functions.database.ref('path')
     .onWrite(event => {
      const original = event.data.val();
      //I want to use value like this.
      const other_val= root.database.ref('path').val();
      console.log('email', "firms", original);
      const uppercase = original.toUpperCase();
      return event.data.ref.parent.child('uppercase').set(uppercase);
    });

我想使用 other_valwith 事件数据,但到目前为止我只使用事件数据 ref,但我可以使用更多父或子在数据库 event.data.ref 中上升或下降。我该如何解决?

编辑: 感谢@davidtaubmann 的回答,我尝试学习正确的方法。

exports.makeUppercase = functions.database.ref('/nonVerifiedUsers/{email}')
     .onWrite(event => {

      var changed= "";
      // You can use ref parameter like this
      var param=event.params.email;
      admin.database().ref('/uppercase').once('value').then(function(snap){
      changed=snap.val();
          }).then(function(){
              /*if you want to use changed value wait until it return and return where 
              you want using admin.database.ref and use event parameter in reference like 
              this*/
              return admin.database.ref('/path/').child(param).set(changed);
              /*You can return regular event data but make sure you didn't write under 
              same reference server count this again as event and loop until reach 32 th child(maxiumum child nodes)*/
              return event.data.ref.parent.child('uppercase').set(changed);
          });
       //In addition you can return multiple times in one function:
        return event.data.ref.parent.child('dif').set(changed);

      
      });

【问题讨论】:

  • 我相信如果你需要和产生写的用户不同的访问权限,你需要adminRef,我和你的情况一样,但是从来没想过用父级升序降序,我会尝试这样解决。
  • 我刚刚发现在functions文件夹的node-modules里面有一个firebase-admin模块,如果我们确保它在functions package.json文件中被激活并且在开始的时候初始化它index.js,我们可能会直接从函数构造中使用它...我将在接下来的几个小时内测试这两种可能性。
  • 正如我在 cmets 中所说的那样...尝试将 admin.database().ref('uppercase').on('value',function(snap){ 更改为 admin.database().ref('uppercase').once('value').then(function(snap){
  • 如何从快照中分配全局变量值,Ogulcan 分配 var changed 的​​方式对我不起作用。

标签: node.js firebase firebase-realtime-database google-cloud-platform google-cloud-functions


【解决方案1】:

使用 firebase-admin 节点模块

按照上面的 cmets,我确实测试了选项,并且如所想,如果您从 node_modules 初始化 Firebase-admin(确保它也包含在 packages.json 中),您可以从数据库中检索任何数据。

对于您的代码,我相信您只需在 index.js 文件的开头添加这两行(以及所有其他初始化):

const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

然后您以后可以像通常使用firebase 一样使用admin,如下所示:

admin.database().ref('users/xxxx').once('value').then(function(snapshot){....

它非常适合我!

【讨论】:

  • 我试过你的建议,但在 onWrite 'admin.database().ref('uppercase').on('value',function(snap){ console.log(snap.val() ) }); '它什么也没给我
  • 我相信你应该使用 ONCE 而不是 ON,这是非常不同的,并且功能可能禁用了 ON,因为它不是客户端。提示:您可以将任何需要的内容发送到 console.log,并在 Firebase 控制台/功能/注册表选项卡中查看结果
  • 你能举出更具体的例子吗,比如我可以在 then 方法中为变量赋值吗?
  • @ogulcan 我只使用了阅读语句,所以我不确定,但我相信管理模块也应该有整个数据库的写许可。
  • 我试过 admin.database().ref('/users').once('value').then(function(snap){ original=snap.val(); });之后我记录原件。日志是 Promise { }
猜你喜欢
  • 2023-03-05
  • 2018-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 2019-09-12
  • 1970-01-01
相关资源
最近更新 更多