从Firebase函数访问实时数据库

时间:2018-09-12 01:41:11

标签: firebase firebase-realtime-database google-cloud-functions

我们正在为移动应用程序使用firebase功能和firebase实时数据库。当有人下订单时,我们确实会发送电子邮件,该订单是使用以下Firebase DB触发器实现的:

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()不是函数”

1 个答案:

答案 0 :(得分:2)

您应该使用Firebase Admin SDK。它具有读取和写入数据库的能力。实际上,当您编写数据库触发器时,它提供给您的引用实际上来自Admin SDK,因此它是相同的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.