【问题标题】:How to add firebase event listener for nodeJs express app如何为nodeJs express应用添加firebase事件监听器
【发布时间】:2020-06-26 13:01:54
【问题描述】:

我正在创建一个应用程序,其中所有 firebase 内容都由 nodeJs express 应用程序处理。

我希望应用通过 API 调用来监听实时值变化。 但问题是向快递服务器发出的 POST 请求只有 3-4 分钟的超时时间,之后请求才会终止。因此,如果数据库中有任何更改触发侦听器,那么我如何让我的应用程序侦听这些更改并将响应发送回客户端(谁发出 API 请求)。

这里是 express server 应用的示例代码 sn-p

router.post('/listen', (req, res) => {
    //listen to the changes in database

    var ref = db.ref("message").child("new_message_available");

    ref.on('value', snap => {
        var data = snap.val();

        if (data) {
            console.log('New message available')

            res.send({
                'message' : "new message available"
            });
        }
        else {
            console.log('No new message available')
        }
    });
});

这里是演示 firebase 实时数据库结构

{
    'message': {
        'new_message_available': true
    }
}

由于 POST 请求只存在 3-4 分钟,并且可以随时对数据库进行更改,因此如何监听这些更改并发送回响应。

【问题讨论】:

    标签: javascript node.js firebase firebase-realtime-database


    【解决方案1】:

    使用简单的 REST api 是不可能的,并且需要与服务器建立 Socket 连接,其中在 firebase 数据库上添加了监听器,触发时通知客户端通过套接字连接连接。

    可能有多种套接字实现方式,我发现socket.io 最适合我的用例。上面的示例代码如下:

    服务器端

    const express = require('express');
    const http = require('http')
    const socketio = require("socket.io");
    
    const server = http.createServer(app)
    const io = socketio(server)
    
    // firebase db reference
    var ref = db.ref().child(`userPresent`);
    
    io.on('connection', socket => {
        ref.on('value', snap => {
    
            let data = snap.val()
    
            if (data == true) {
                io.to(room).emit('userpresent', "User is online");
            } else {
                io.to(room).emit('userpresent', "User is offline");
            }
    
        });
    })
    
    server.listen(3000, () => {
        console.log("Server running on port 3000");
    });
    

    客户端

    const socket = io()
    
    socket.on('userpresent', message => {
       console.log(`user info : ${message}`)
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-13
      • 2022-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多