前言
上一篇博客说到线上部署项目到服务器,博主说的就是这个 React-Ts 项目啦,它是博主为将来找实习准备的,用到的技术点有好一些是边学边做的,如果有不同见解的地方还请读者不吝赐教。
需要事先说明的是,关于这个项目的博客,博主并不打算讲解代码实现,每个人的项目用到的技术栈不尽相同,但有一点可以确定,就是项目功能点的实现逻辑是大致相同的,故博主会更多地讲解各模块/功能点的逻辑实现 ^_^
项目介绍
这是一个前后端分离项目:在线编程笔试平台。按照用户角色分为两部分,分别是面试官侧和候选人侧,主要功能是候选人在线完成代码编写,面试官可查看编程结果。
项目任务拆解
- 登录/注册模块
- 支持邮箱登录和注册
- 支持“退出登录”功能
- 面试题模块
- 面试官可填写面试题
- 每个面试题有固定链接
- 支持新建面试题和修改面试题目
- 支持邀请一个候选人编程
- 面试题目支持富文本格式
- 在线编程模块
- 候选人可在线编写代码
- 代码支持多种语言高亮 111
- 候选人侧提交最终编程代码 111
- 面试官侧刷新能看到最终代码 111
- 在线编程模块支持自动刷新
- 候选人侧代码支持自动保存
- 面试官侧代码自动刷新
- 实时文字聊天模块
- 候选人和面试官可实时文字聊天
- 其他获得连接的人都可参与文字聊天
- 在线语音聊天模块
- 候选人和面试官可实时语音聊天
- 在线编程模块支持运行JS代码
- 候选人和面试官可在线运行 JS 代码并查看输出
- 在线编程模块支持协同编辑
- 候选人和面试官可实时协作编程
- 视频聊天模块
- 候选人和面试官可实时视频聊天
技术栈
前端:React + TypeScript ,后端:Node.js + MySQL + Koa 。项目实现
- 为了实现登录/注册模块,使用 Cookie 验证用户信息、localStorage 保存登录态、nodemailer 发送验证码邮件至用户邮箱、登录或注册按钮设置防抖,实现了登录、注册、忘记密码和15天内免登陆功能。
- 为了实现创建面试题模块,使用 Ant Design 完成 UI 设计、wangEditor 支持面试官编辑面试题、在修改信息时调用后端接口以获取数据进行初始化、nodemailer 发送邮件告知候选人试卷信息,使面试官能进行试卷和试题的增删查改,以及邮件通知当事人试卷信息。
- 为了实现在线编程模块,使用 react-monaco-editor 支持候选人编辑代码并提交、filter api 完成试题的多次筛选,实现了编程功能。
- 为了实现实时文字聊天模块,使用 WebSocket 监听客户端和服务端的聊天信息,后端接受处理后响应给前端,使候选人和面试官能进行实时文字交流。
- 为了快速完成项目部署,前端使用 scp 连接服务器并上传文件到服务器 nginx 下的指定目录,后端使用 fs 读写本地文件、node-ssh 连接服务器并将指定文件上传到 tomcat 下的指定目录、运行本地编写的 deploy.sh 脚本启动后端服务、并用 pm2 实时监控,以此实现了项目的自动化部署。
可拓展点
- 性能优化。
- 用户能提供试题题解,支持评论。
- 实现语言国际化,支持多种语言切换。
- 完善安全措施,能防止 xss 、csrf 等网络攻击。
- 用户数据图形化,直观展示用户做题量、通过率等信息。
- 实现视频和语音聊天模块,支持实时视频通话和语音聊天。
项目亮点(目前只实现了第一点)
- 2021/09/04:实现登录/注册的静态页面
- 2021/09/19:实现登录/注册逻辑(包括账号密码登录、登录拦截,session 身份验证)
- 2021/09/29:初步部署前后端项目到阿里云服务器
- 2021/10/04:购买域名并实现自动化部署项目
- 2021/10/05:支持使用邮箱 登录和注册(删除了账号密码登录、注册的方式)
- 2021/10/09:支持新建/删除试卷,在“新建试卷”里新建/修改/删除试题,发送邮件至候选人邮箱
- 2021/10/23:初步完成面试题模块(包含“修改试卷”)
- 2021/10/30:初步完成在线编程模块
- 2021/10/31:搭建个人博客
- 2021/11/02:记录项目从开始到现在的一系列笔记
项目展示
PC 端
项目地址
GitHub 前端仓库地址:https://github.com/HCYETY/react-ts-coding_web
GitHub 后端仓库地址:https://github.com/HCYETY/node-mysql-coding_serve
项目演示地址:http://www.syandeg.com
写在后面
这个项目是笔者的第一个实习项目,前后端均由笔者独立完成,花费了很多时间和精力,读者觉得不错的话不妨给个star
支持一下呀,不胜感激~ ^_^
这个项目笔者打算继续完善并维护下去,将它做大起来,如果有读者感兴趣该项目,想参与实现某个功能,或者有什么好的想法,也可以在评论区留言或者在 Github 上提 issue 等等,笔者看到的话会及时回复哒,先谢谢大家的支持啦!
另外针对本项目,后续会出相关文章介绍具体实现过程,大家也可以关注一下!
在线编程笔试平台项目系列文章: