【问题标题】:How to get Realtime Database in Firebase by using cloud function?如何使用云功能在 Firebase 中获取实时数据库?
【发布时间】:2023-04-08 00:09:01
【问题描述】:

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

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 中获取实时数据库?

【问题讨论】:

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


    【解决方案1】:

    正如您将在doc 中看到的那样,实时数据库Reference 没有get() 方法。另一方面,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. 你应该管理你的云函数中的错误,看这个官方视频:https://firebase.google.com/docs/functions/video-series#learn-javascript-promises-pt1-with-http-triggers-in-cloud-functions

    【讨论】:

    • "此方法不适用于 Cloud Functions" -> "此方法在 Cloud Functions 中不常用"
    猜你喜欢
    • 1970-01-01
    • 2018-08-20
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2020-05-15
    • 1970-01-01
    • 2019-09-20
    相关资源
    最近更新 更多