使用firebase云功能从云端防火墙读取数据?

时间:2018-01-22 06:40:37

标签: android node.js firebase google-cloud-functions google-cloud-firestore

我是Android开发人员,最近我开始研究基于firebase云功能和firestore数据库的项目。我正在编写一个HTTP触发器函数,该函数将获取两个参数并将该参数值与firestore数据值进行比较,如果值匹配,则返回true或其他错误的响应。

重复问题:

是的,有一些问题已经被问到与我有关,但它们并不相似:

  1. Firestore + cloud functions: How to read from another document

  2. Firebase HTTP Cloud Functions - Read database once

  3. Firebase文档说

      

    Cloud Firestore支持创建,更新,删除和写入事件

    我想从HTTP触发器中读取firestore值。

    我尝试了什么:

    exports.userData = functions.https.onRequest((req, res) => {
    
     const user = req.query.user;
     const pass = req.query.pass;
    });
    

    我几乎被困在这一部分。任何帮助将不胜感激。感谢

    P.S。我对JS / TypeScript / NodeJS

    的知识非常有限

2 个答案:

答案 0 :(得分:18)

有点晚了,但对于任何其他人来说都是绊脚石。

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


exports.someMethod = functions.https.onRequest((req, res) => {
    var stuff = [];
    var db = admin.firestore();
    db.collection("Users").doc("7vFjDJ63DmhcQiEHwl0M7hfL3Kt1").collection("blabla").get().then(snapshot => {

        snapshot.forEach(doc => {
            var newelement = {
                "id": doc.id,
                "xxxx": doc.data().xxx,
                "yyy": doc.data().yyy
            }
            stuff = stuff.concat(newelement);
        });
        res.send(stuff)
        return "";
    }).catch(reason => {
        res.send(reason)
    })
});

答案 1 :(得分:1)

感谢Ruan's answer,下面是onCall(..)变体的示例:

exports.fireGetColors = functions.https.onCall((data, context) => {

    return new Promise((resolve, reject) => {

        var colors = {};

        var db = admin.firestore();
        db.collection('colors')
          .get()
          .then(snapshot => {

              snapshot.forEach(doc => {
                  var key = doc.id;
                  var color = doc.data();
                  color['key'] = key;

                  colors[key] = color;
              });

              var colorsStr = JSON.stringify(colors, null, '\t');
              console.log('colors callback result : ' + colorsStr);

              resolve(colors);
          })
          .catch(reason => {
              console.log('db.collection("colors").get gets err, reason: ' + reason);
              reject(reason);
          });
    });

});