27
votes

I'm an Android developer and recently I've started working on a project based on firebase cloud functions and firestore database. I'm writing an HTTP trigger function that will take two parameters and compare that parameter value with the firestore data value and if the value matches then return a response of true or else false.

Duplicate Question:

Yes, there are some question already asked related to mine but they are not similar:

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

  2. Firebase HTTP Cloud Functions - Read database once

Firebase Docs says:

Cloud Firestore supports create, update, delete, and write events

I want to read firestore value from HTTP trigger.

What I have tried:

exports.userData = functions.https.onRequest((req, res) => {

 const user = req.query.user;
 const pass = req.query.pass;
});

I'm pretty much stuck at this part. Any help will be greatly appreciated. Thanks

P.S. I have very limited knowledge related to JS/TypeScript/NodeJS

2
You can use the Firebase Admin SDK to read and write data in Firestore. There are lots of samples too. I'm afraid to say that you will have to put a lot of effort into learning new things and studying others' code in order to begin to make things work the way you want.Doug Stevenson
Thanks for the quick response @DougStevensonAbhinandan Chakraborty
Did you figure this out? @AbhinandanChakrabortyMans
@Mans No, I stopped using firebase for this project. I learned Node.JS and now I'm developing backend entirely with Node.JS. It's actually pretty easy to do stuff with node and with full control over the backend serverAbhinandan Chakraborty

2 Answers

67
votes

a bit late, but for any one else stumbling upon this.

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)
    })
});
7
votes

Thanks to Ruan's answer, here's an example for onCall(..) variation:

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);
          });
    });

});