簡體   English   中英

使用 firebase 雲 function 從雲 Firestore 讀取數據?

[英]Read data from cloud firestore with firebase cloud function?

我是一名 Android 開發人員,最近我開始從事一個基於 firebase 雲函數和 firestore 數據庫的項目。 我正在編寫一個 HTTP 觸發器 function,它將采用兩個參數並將該參數值與 firestore 數據值進行比較,如果該值匹配,則返回 true 或 false 的響應。

重復問題:

是的,已經提出了一些與我相關的問題,但它們並不相似:

  1. Firestore + 雲功能:如何從另一個文檔中讀取

  2. Firebase HTTP Cloud Functions - 一次讀取數據庫

Firebase 文檔說

Cloud Firestore 支持創建、更新、刪除和寫入事件

我想從 HTTP 觸發器中讀取 firestore 值。

我試過的:

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

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

我幾乎停留在這部分。 任何幫助將不勝感激。 謝謝

PS 我對 JS/TypeScript/NodeJS 的了解非常有限

有點晚了,但對於任何其他絆倒這一點的人來說。

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

感謝阮的回答,這里有一個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);
          });
    });

});

在 2022 年,我正在嘗試以“模塊化”的方式來做這件事,就像 firebase 對版本 >= 9 所做的那樣。也使用 typescript 作為補充:)。 感謝的靈感。

所以,這就是我的制作方法(類似於以下內容):

import * as functions from "firebase-functions";
import { getFirestore } from "firebase-admin/firestore";
import { initializeApp } from "firebase-admin/app";
initializeApp(functions.config().firebase);


export const someMethod = functions.https.onRequest((req, res) => {
    let stuff: any[] = [];
    let db = getFirestore();
    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)
    })
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM