如何使用云功能在Firebase中获取实时数据库?

时间:2019-09-21 13:47:21

标签: javascript node.js firebase firebase-realtime-database google-cloud-functions

我已经创建了Firebase项目并向Realtime Database添加了一些数据?我还使用控制台创建了云功能。这是我的以下代码

const functions = require('firebase-functions');

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

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

 const snapshott = await admin.database().ref('/messages').push({"original":"ZXz"});

 res.send("assasin")
});
exports.getMessage = functions.https.onRequest(async (req, res) => {

    const snapshott = await admin.database().ref('/messages').get();

    res.send(snapshott)
});

addMessage函数工作正常,但getMessage函数给出错误。

这是以下错误

TypeError: admin.database(...).ref(...).get is not a function
    at exports.addMessage.functions.https.onRequest (/srv/index.js:15:60)
    at <anonymous>
    at process._tickDomainCallback (internal/process/next_tick.js:229:7)

那么如何使用云功能在Firebase中获取实时数据库?

1 个答案:

答案 0 :(得分:1)

正如您将在doc中看到的那样,实时数据库get()没有Reference方法。另一方面,Firebase提供的另一个NoSQL数据库Firestore具有get()方法。您可能会混淆两种数据库服务:-)

要读取实时数据库中的节点,您需要使用once()方法。

因此,在您的情况下,您将执行以下操作:

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

    const snapshott = await admin.database().ref('/messages').once('value');

    res.send(snapshott);

});

还有两点需要注意:

  1. 您还可以使用on()方法来读取节点,但是该方法在Cloud Functions中并不常用,因为它设置了一个监听器,该监听器连续“在以下位置监听数据更改”特定位置”。
  2. 您应该管理Cloud Function中的错误,请观看以下官方视频:https://firebase.google.com/docs/functions/video-series#learn-javascript-promises-pt1-with-http-triggers-in-cloud-functions