Serverless 框架构建在线课堂平台实战

阅读时长 15 分钟读完

Serverless 架构是近年来越来越受到关注的技术趋势之一,它的核心思想是将服务器的管理交给云服务商,使得开发者只需要关注业务逻辑,并且可以实现真正的按需付费。本文将介绍如何使用 Serverless 框架构建一个在线课堂平台,包括前端和后端的开发。本文的内容详细、深入并有学习和指导价值,附带示例代码。

技术栈

在介绍实战步骤之前,我们先来看一下本次实战所用到的技术栈:

  • Serverless Framework:用于快速搭建 Serverless 架构的框架
  • AWS Lambda:Amazon Web Services 的函数计算服务
  • AWS API Gateway:Amazon Web Services 的 API 网关服务
  • AWS DynamoDB:Amazon Web Services 的 NoSQL 数据库
  • React:前端界面的开发框架
  • Ant Design:React 的 UI 组件库
  • Socket.IO:用于实现实时聊天功能的 JavaScript 库

实战步骤

1. 初始化项目

首先,我们需要使用 Serverless Framework 来初始化项目。在命令行中输入以下内容:

这会创建一个名为 my-app 的项目,并且使用 aws-nodejs 模板进行初始化。

2. 开发后端

接下来,我们需要使用 Serverless Framework 来部署后端。在项目根目录下,创建 serverless.yml 文件,并添加以下内容:

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

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

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

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

以上配置定义了一个名为 my-app 的 Serverless 服务,并使用 AWS Lambda、API Gateway 和 DynamoDB 来实现在线课堂平台后端。

具体来说,我们定义了五个 Lambda 函数,分别对应获取单个课程、获取所有课程、创建课程、更新课程、删除课程操作,通过 API Gateway 对外暴露服务。

此外,我们还定义了 DynamoDB 表,用于存储课程相关信息。

在 serverless.yml 所在目录下,使用以下命令来部署后端:

在运行完成后,可以在输出的信息中找到 API 网关的 URL,复制该 URL 并保存,供前端访问使用。

3. 开发前端

接下来,我们需要开发前端界面。首先在项目根目录下创建一个名为 client 的目录:

这将创建一个名为 client 的 React 工程并打开该目录。接下来,我们需要安装必要的依赖:

其中,Ant Design 是一个开箱即用的 UI 组件库,Socket.IO 则是用于实现实时聊天功能的 JavaScript 库。

我们需要修改 src/index.js 和 src/App.js 文件。

在 src/index.js 文件中添加以下内容:

以上代码加载了 App 组件,并引入了 Ant Design 组件库的样式。

在 src/App.js 文件中添加以下内容:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

以上代码定义了一个名为 App 的 React 组件,并通过 API Gateway,与后端进行交互和数据获取。其中,List 和 Card 分别是 Ant Design 提供的 UI 组件,Form、Input 和 Button 则是 Ant Design 提供的表单和按钮组件。

此外,我们还定义了 showModal、handleOk 和 handleCancel 函数,用于显示创建新课程的 Modal,并实现其确认和取消行为。

最终,我们在 src/App.css 文件中添加以下内容:

以上代码修改了页面的一些样式。

现在,我们需要启动前端服务:

打开浏览器,访问 http://localhost:3000/,即可看到我们的在线课堂平台页面。

4. 增加实时聊天功能

最后,我们需要在在线课堂平台中增加实时聊天功能。这可以通过 Socket.IO 完成。

在 serverless.yml 中,我们需要添加以下代码:

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

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

以上代码通过添加 serverless-apigw-websocket 插件和 serverless-offline 插件,配置了一个 WebSocket API,用于实现实时聊天功能。

在前端代码的 App.js 中,我们需要进行如下修改:

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

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

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

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

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

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

我们通过 useState 来保存聊天信息,并在 listContent 函数中输出聊天信息。然后,我们通过 useEffect 来订阅服务器端的 chat message 事件,并在其触发时,通过 setChatMessages 来更新聊天信息。

最后,我们需要添加一个 onPressEnter 事件到密码框中,并在该事件中,调用 Socket.IO 的 emit 方法,向服务器端发送 chat message 事件。

至此,我们就完成了在线课堂平台实时聊天功能的开发。

总结

本文介绍了如何使用 Serverless 框架来搭建一个在线课堂平台,并介绍了必要的技术栈。通过部署后端和开发前端,我们可以创建一个基本的在线课堂平台。最后,我们增加了 Socket.IO 的实时聊天功能,使得学员和老师可以实时交流。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6475a42f968c7c53b02a7010

纠错
反馈