Node.js Firebase的使用教程

486 阅读3分钟

Node.js Firebase

如今,实时数据已经成为大多数应用程序的一个重要组成部分。许多Web应用程序使用套接字来连接客户端和其他客户端以及服务器。尽管如此,这其中的主要挑战是数据的存储。Firebase有一个实时数据库功能,可以轻松创建实时应用程序,如聊天应用程序。

为了开始,让我们首先使用npm init ,创建一个Node.js应用程序,并添加以下包。

  • firebase:这将用于访问和执行对我们的Firebase实时数据库的操作
  • websocket讯息:将用于连接我们的客户和服务器,并允许他们向服务器发送讯息,反过来,服务器将在数据库中记录相同的讯息后进行回音。如果有任何其他地方的消息到达实时数据库,它将向所有监听服务器的客户发出回声。

要设置你的Firebase账户,请按照Firebase官方文档中的这些说明,并获得你的凭证。按照说明进行操作,直到Step 3 。最好是把你的凭证也隐藏在.env 文件中。

添加以下代码来设置firebase的配置和数据库。我们正在使用firebase/database 包来访问实时数据库,我们将使用messages 数据库参考。

const firebase = require("firebase/app");

const firebaseConfig = {
    apiKey: process.env.apiKey,
    authDomain: process.env.authDomain,
    databaseURL: process.env.databaseURL,
    projectId: process.env.projectId,
    storageBucket: process.env.storageBucket,
    messagingSenderId: process.env.messagingSenderId,
    appId: process.env.appId,
    measurementId: process.env.measurementId
};
firebase.initializeApp(firebaseConfig);
require('firebase/database')
const database = firebase.database().ref('messages/')

接下来,我们将需要设置我们的服务器,以创建一个套接字。我们将使用Node.js的http 接口来创建一个服务器。然后,我们将使用websocket ,将寄存器连接到服务器中的套接字(创建一个套接字服务器)。该服务器监听端口为2400,我们使用我们创建的服务器创建一个socketServer。

const http = require('http')
const server = http.createServer()
server.listen(2400)

const socketServer = require('websocket').server
const socket = new socketServer({httpServer: server})

接下来我们发送消息并将其保存到firebase。我们首先接受每个客户端的连接。然后每当有消息被发送,我们就把它添加到数据库中。由于数据库提供了实时功能,所以每当有新的消息到达时,我们就会监听,将其显示给所有监听的客户端。

socket.on('request', (req) => {
    const connection = req.accept(null, req.origin)
    connection.on('message', (message) => {
        database.set({message: message})
            .then(_ => {console.log('message added successfully')})
            .catch(err => {console.log(err)})
    })
    connection.on('close', () => {database.off()})
    database.on('value', snapshot => {
        connection.send(JSON.stringify(snapshot.val()))
    })
})

我们使用database.set 方法来写入firebase数据库,当它成功时,我们记录下消息已经被添加。然后,我们使用database.on('value') 方法来监听数据库中的任何变化。由于数据是以snapshot ,我们调用.val() 方法来获取快照的内容,即数据库中的新数据。

一旦websocket连接关闭,我们也会关闭数据库以避免浪费资源。

正如你在下面看到的,有两条消息被发送到服务器,一旦保存,我们会得到两条日志和两条发送到客户端的消息。

socket

log

如果你喜欢socket.io用于客户端-客户端连接,你可以查看socket.io教程并结合firebase来保存消息。