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 来初始化项目。在命令行中输入以下内容:
$ serverless create --template aws-nodejs --path my-app $ cd my-app
这会创建一个名为 my-app 的项目,并且使用 aws-nodejs 模板进行初始化。
2. 开发后端
接下来,我们需要使用 Serverless Framework 来部署后端。在项目根目录下,创建 serverless.yml 文件,并添加以下内容:
-- -------------------- ---- ------- -------- ------ --------- ----- --- -------- ---------- ------- --------- ---------- ---------- -------- ----------------- ------- - ----- ----- ----------- ------- --- ----------- -------- ------------------ ------- - ----- ----- ------- ------- --- ------------- -------- -------------------- ------- - ----- ----- ------ ------- ---- ------------- -------- -------------------- ------- - ----- ----- ----------- ------- --- ------------- -------- -------------------- ------- - ----- ----- ----------- ------- ------ ---------- ---------- ------------ ----- -------------------- ----------- ---------- ----------------------------- --------------------- - -------------- -- -------------- - ---------- - -------------- -- -------- ---- ------------ ---------------
以上配置定义了一个名为 my-app 的 Serverless 服务,并使用 AWS Lambda、API Gateway 和 DynamoDB 来实现在线课堂平台后端。
具体来说,我们定义了五个 Lambda 函数,分别对应获取单个课程、获取所有课程、创建课程、更新课程、删除课程操作,通过 API Gateway 对外暴露服务。
此外,我们还定义了 DynamoDB 表,用于存储课程相关信息。
在 serverless.yml 所在目录下,使用以下命令来部署后端:
$ serverless deploy
在运行完成后,可以在输出的信息中找到 API 网关的 URL,复制该 URL 并保存,供前端访问使用。
3. 开发前端
接下来,我们需要开发前端界面。首先在项目根目录下创建一个名为 client 的目录:
$ mkdir client $ cd client $ npx create-react-app .
这将创建一个名为 client 的 React 工程并打开该目录。接下来,我们需要安装必要的依赖:
$ npm install antd $ npm install socket.io-client
其中,Ant Design 是一个开箱即用的 UI 组件库,Socket.IO 则是用于实现实时聊天功能的 JavaScript 库。
我们需要修改 src/index.js 和 src/App.js 文件。
在 src/index.js 文件中添加以下内容:
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App'; import 'antd/dist/antd.css'; ReactDOM.render(<App />, document.getElementById('root'));
以上代码加载了 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 文件中添加以下内容:
.App { padding: 50px; } .course-name { font-size: 18px; font-weight: bold; }
以上代码修改了页面的一些样式。
现在,我们需要启动前端服务:
$ npm start
打开浏览器,访问 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