代码之家  ›  专栏  ›  技术社区  ›  Vik

从firebase函数访问实时数据库

  •  0
  • Vik  · 技术社区  · 7 年前

    exports.on_order_received = functions.database.ref("/orders/{id}")
        .onCreate((change, context) => {
            console.log("start of on_order_received")   
    ...
    

    上面的触发器对我们来说很好。现在,我们有一些要求,在图片中没有DB触发器。它是一个http请求,如下所示

    exports.daily_sales_report = functions.https.onRequest((req, res) => {
        //query data from firebase
    

    问题是我们如何在这里访问实时数据库对象?或者换句话说,如何获得对/orders节点的访问权?我在下面试过了

    exports.daily_sales_report = functions.https.onRequest((req, res) => {
        //query data from firebase
        var ref = functions.database.ref('orders')
        ref.orderByValue().limitToLast(3).on("value", function(snapshot) {
            snapshot.forEach(function(data) {
              console.log("The " + data.key + " dinosaur's score is " + data.val());
            });
        })
    

    但这行不通。我得到错误“orderByValue()不是函数”

    2 回复  |  直到 7 年前
        1
  •  8
  •   Doug Stevenson    7 年前

    你应该使用 Firebase Admin SDK . 它有能力读写你的数据库。事实上,当您编写数据库触发器时,它提供给您使用的refs实际上来自adminsdk,因此它是相同的API。在使用HTTP类型函数时,您只需要自己初始化它:

    // at the top of the file:
    const admin = require('firebase-admin');
    admin.initializeApp();
    
    // in your function:
    const root = admin.database().ref();
    // root is now a Reference to the root of your database.
    
        2
  •  5
  •   Neelavar    7 年前

    你必须使用 admin functions 访问 database() 读取数据。

    firebase-admin sdk,使用 import require 视情况而定(取决于您使用的是TypeScript还是JavaScript)

    // The Firebase Admin SDK to access the Firebase Realtime Database.    
    import * as admin from 'firebase-admin';
    

    // The Firebase Admin SDK to access the Firebase Realtime Database.
    const admin = require('firebase-admin');
    

    exports.daily_sales_report = functions.https.onRequest((req, res) => {
        //query data from firebase
        /* Do not use functions */ 
        // var ref = functions.database.ref('orders')
        /* Instead use the admin */
        var ref = admin.database().ref('orders')
        ref.orderByValue().limitToLast(3).on("value", function(snapshot) {
            snapshot.forEach(function(data) {
              console.log("The " + data.key + " dinosaur's score is " + data.val());
            });
        })
    

    orderByValue() 中未定义 functions.database admin.database().ref()