使用 Vue.js 和 Firebase 实现在线即时聊天室

在现代 Web 应用中,实时通信越来越受欢迎,如在线聊天室、实时游戏、交互式白板等。Vue.js 是一种流行的 JavaScript 框架,Firebase 是一种实时数据库和后端服务,两者结合可以快速搭建现代 Web 应用。本文将介绍如何使用 Vue.js 和 Firebase 实现在线即时聊天室,同时深入讲解相关的前端技术。

前置知识

我们假设读者已经掌握了以下技术:

  • 基本的 HTML、CSS 和 JavaScript;
  • Vue.js 的基本概念和用法;
  • Firebase 的基本概念和用法。

如果你还不熟悉这些技术,可以先通过参考文献学习。

基本架构

我们的聊天室使用 Firebase Realtime Database 实现后端部分,Vue.js 实现前端部分。以下是基本的架构:

                                                     ------ ---- --------
                                                 ----------------------------
                                                 -                          -
                                                 -         ------           -
                                                 -                          -
                                                 --------------------------
                                                           -        -
                                                           -        -
                                   -------- -------- --------    ---------
                                                           -        -
                                                           -        -
                                                 --------------------------
                                                 -                          -
                                                 -        --------          -
                                                 -                          -
                                                 ----------------------------

用户在 Web 浏览器中使用 Vue.js 应用程序进行聊天,Vue.js 应用程序使用 Firebase SDK 直接连接到 Firebase Realtime Database,获取或更新实时聊天消息。Firebase 实时数据库使用 WebSocket 实现实时通信。

实现过程

我们将使用 Vue CLI 快速创建应用程序。如果您还没有安装 Vue CLI,请先按照参考文献[1]和参考文献[2]中的步骤进行安装。

创建 Vue 应用

在终端中输入以下命令:

--- ------ --------

使用默认选项创建一个新的 Vue.js 应用程序。在创建过程中,选择“手动选择特性”,然后选中以下特性:

  • Babel
  • Vue Router
  • Vuex
  • CSS Pre-processors (Sass/SCSS)
  • Linter / Formatter (ESLint + Prettier)

接下来,选择“Sass/SCSS (with dart-sass)”。选择“ESLint + Prettier”时,您可以选择“Lint on save”和“Lint and fix on commit”。这些选项将使代码更加规范和干净。

应用程序创建后,切换到应用程序目录并运行以下命令:

--- --- -----

应用程序将在 http://localhost:8080 上运行。在浏览器中打开该地址,您将看到默认 Vue 页面。

安装 Firebase SDK

在 Firebase 控制台中创建一个新项目。在项目设置页面中,选择“添加应用程序”,然后选择“Web”。输入应用程序名称,然后生成配置数据。将配置数据保存到应用程序的根目录下的“src/firebase.config.js”文件中:

------ ------- -
  ------- ---------------
  ----------- -------------------
  ---------- ------------------
  -------------- ----------------------
  ------------------ ---------------------------
  ------ -------------
-

安装 Firebase SDK:

--- ------- --------

实现登录和退出功能

我们将使用 Firebase Authentication 实现用户登录。在 Firebase 控制台中启用“电子邮件/密码”身份验证提供程序。然后,在“src/main.js”中添加以下代码:

------ -------- ---- --------------
------ ---------------
------ -------------- ---- -------------------

--------------------------------------

----- --- - --------------

--------------------------------------- -- -
  -- ------ -
    --------------------- -----
  - ---- -
    ----------------------
  -
--

--------------
---------------
-----------------

该代码使用 Firebase SDK 初始化 Firebase 应用程序,并在身份验证状态更改时更新 Vuex store。在“src/store/index.js”中添加以下代码:

------ - ----------- - ---- ------

------ ------- -------------
  ------ -
    ----- ----
  --
  ---------- -
    ------------ ----- -
      ---------- - ----
    --
    ------------- -
      ---------- - ----
    -
  -
--

该代码定义 Vuex store,并为用户登录和退出操作定义 mutation。

在“src/views/Login.vue”中,添加以下代码:

----------
  -----
    --------------
    ----- ------------------------
      -------
        ------
        ------ ------------ --------------- ---------
      --------
      ----
      -------
        ---------
        ------ --------------- ------------------ ---------
      --------
      ----
      ------- ----------------------------
      ------- ------------- -------------------------------
    -------
  ------
-----------

--------
------ -------- ---- --------------
------ ---------------

------ ------- -
  ------ -
    ------ -
      ------ ---
      --------- --
    -
  --
  -------- -
    ----- ------- -
      --- -
        ----- ------------------------------------------------------ --------------
      - ----- ------- -
        --------------------
      -
    --
    -------- -
      ----------------------------
    -
  -
-
---------

该代码使用“电子邮件/密码”身份验证提供程序,使用用户提供的电子邮件和密码进行登录。如果失败,则显示错误消息。如果成功,则 Vuex store 将更新为登录用户。

在“src/views/Logout.vue”中,添加以下代码:

----------
  -----
    ---------------
    ------ --- ---- --- ---- -- ---- --------
    ------- --------------------- ------------
  ------
-----------

--------
------ -------- ---- --------------
------ ---------------

------ ------- -
  -------- -
    ----- --------- -
      --- -
        ----- -------------------------
        ----------------------
      - ----- ------- -
        --------------------
      -
    -
  -
-
---------

该代码使用 Firebase SDK 中的“signOut”方法进行注销。

在“src/views/Chat.vue”中,添加以下代码:

----------
  -----
    ------------ ---- ---------
    -- -------------------------------- ----- -- ------ -- -------------
    ---- -------
      --------- -- --- -- ----------------------- ------
      ------- ------------------------------------------------
    ------
  ------
-----------

该代码检查用户是否已登录并显示相应的控件。

在“src/router/index.js”中,添加以下代码:

------ ----- ---- --------------------
------ ------ ---- ---------------------
------ ---- ---- -------------------

----- ------ - -
  - ----- ---- ---------- ----- --
  - ----- ---------- ---------- ------ --
  - ----- -------- ---------- ---- -
-

----- ------ - --------------
  -------- -------------------
  ------
--

---------------------- ----- ----- -- -
  -- -------- -- --- -- ------------------ -
    -------------
  - ---- -- -------- -- ------- -- ------------------- -
    ---------
  - ---- -
    ------
  -
--

------ ------- ------

该代码定义了路由,并在登录或注销操作时自动重定向用户。

运行应用程序:

--- --- -----

打开 http://localhost:8080/ 地址,您将看到登录页面。输入 Firebase 中创建的用户的电子邮件和密码。

实现实时聊天

我们将使用 Firebase Realtime Database 实现实时聊天。在 Firebase 控制台中,在“Realtime Database”中创建一个新的数据库。选择“启用”,然后选择“启用匿名登录”。这将使我们的应用程序可以使用匿名用户访问数据库。

在“src/main.js”中添加以下代码:

------ -------- ---- --------------
------ -------------------
------ -------------- ---- -------------------

--------------------------------------

------ ----- -------- - -------------------

该代码初始化 Firebase SDK,并导出 Firebase Realtime Database 实例。

在“src/views/Chat.vue”中,添加以下代码:

----------
  -----
    ------------ ---- ---------
    -- -------------------------------- ----- -- ------ -- -------------
    ---- -------
      --------- -- --- -- ----------------------- ------
      ------- ------------------------------------------------
      ----- ------------------------------
        -------
          --------
          ------ ----------- ----------------- ---------
        --------
        ------- ---------------------------
      -------
      ----
        --- ---------------- ------ -- --------- -------------
          ---------- ------------ ------------ -- ------------ --
        -----
      -----
    ------
  ------
-----------

--------
------ - -------- - ---- ---------

------ ------- -
  ------ -
    ------ -
      -------- ---
      --------- --
    -
  --
  --------- -
    ------------------------------------ -------- -- -
      ------------- - --
      ----- -------- - --------------
      -- ---------- -
        --------------------------------- --
          ---------------------------------
        -
      -
    --
  --
  -------- -
    ------------- -
      -------------------------------
        ----- -----------------------------
        ----- ------------
      --
      ------------ - --
    -
  -
-
---------

该代码定义了一个文本输入框,允许用户发送聊天消息。在 Vue 代码中,我们使用 Firebase Realtime Database 的“on”方法监听“messages”节点的更改,以便实时更新聊天消息。当用户发送新消息时,我们使用 Firebase Realtime Database 的“push”方法将它添加到“messages”节点中。

运行应用程序:

--- --- -----

打开 http://localhost:8080/ 地址,并登录后,您将看到聊天室页面。在文本输入框中输入消息,并按“发送”按钮发送它。然后,将在下方显示新的聊天消息。

结论

Vue.js 和 Firebase 是两个强大的前端技术,使用它们可以快速实现在线即时聊天室。在这篇文章中,我们深入讲解了相关的前端技术,并提供了完整的示例代码。通过学习本文,读者可以掌握使用 Vue.js 和 Firebase 实现实时聊天的基本方法,从而构建更加现代的 Web 应用程序。

参考文献

  1. Vue CLI 官方文档:https://cli.vuejs.org/
  2. Vue.js 官方文档:https://v3.vuejs.org/guide/introduction.html
  3. Firebase 官方文档:https://firebase.google.com/docs
  4. Firebase Realtime Database 官方文档:https://firebase.google.com/docs/database

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672dff35eedcc8a97c86b6f0