前言
前几个月学完React官方文档教程后准备写一个博客项目来实践学习成果,写完时总觉得博客项目太简单又烂大街,决定把原来的博客项目改造升级成类知乎文章方面功能的项目。
项目详细架构和源码地址:github.com/manyuewuxin…
实现功能
- [x] 登录注册
- [x] 创建文章
- [x] 关注标签
- [x] 文章过滤
- [x] 文章排序
- [x] 文章搜索
- [x] 用户设置
- [x] 用户消息
- [x] 用户动态
- [x] 关注用户
- [x] 收藏文章
- [x] 评论文章
- [x] 个人主页
- [x] 后台管理系统等
部分效果预览
个人主页、用户设置和标签展示UI设计是模仿掘金社区UI的
后台管理系统
项目说明
项目比较杂,只挑重点的说。
前端项目
-
登录接口有两种,一种是用react-router路由驱动,比如
/login
跳转至登录页,另一种是在Mobx全局创建一个可观察的login对象,如果是没有登录状态在首页点赞、收藏、回复评论等向后端请求会返回一个403状态码触发可观察login对象弹出登录模态框。 -
用户的消息系统实现思路其实很简单,当向一个用户回复文章、回复评论、关注时获取这个被回复的用户user_id向后端mongodb的关联message集合插入一个消息文档,被回复的用户在首次登录状态或跳转路由就会刷新消息请求,没有使用任何高大上的消息队列库,缓存数据库redis等。用户的动态设计思路大致和用户消息一样,只不过不需要像用户消息插入被回复用户的关联message集合,而是进入这个用户个人主页时向关联dynamic集合获取动态数据。
-
创建文章富文本编辑器使用了国人开发的wangeditor轻量级富文本编辑器,只要不是要求企业级别的标准,这个富文本编辑器基本可以满足日常编写文章。
-
首页的文章排序没有使用任何算法,纯粹只使用了mongodb的索引排序,根据点击阅读量和喜欢次数多键索引排序,如果是登录状态那么就使用关注标签+点击量+创建日期排序。
-
前端项目的状态管理是使用Mobx和局部state混合管理,因为有些组件的状态是一个区域闭环,每次重新打开需要初始化某个状态,所以不全部写入到Mobx。
-
整个axios请求配置和统一处理请求错误写在request中间件模块,省去了一个请求写一个错误处理。
后端项目
-
后端router模块不是常用那种多个一二级路由组成一个路由模块写法,而是利用fs模块在编译运行阶段扫描controller目录控制器模块全部导入express-router加载路由,实现路由自动化加载,详细实现思路可以看知乎方正这个Nodejs:摆脱黑工坊发展出一款基础企业级框架文章。
-
mongodb驱动库是原生nodejs驱动库,不是mongoose,因为刚写后端时并不知道有这个超集框架,加上原生驱动库也有models API,且大部分实现逻辑都是CRUD,索性直接用原生驱动库。
-
mongodb的用户数据建模都是标准化数据模型一对多,使用$lookup操作符关联查询,这样设计集合方便查询和分离文档储存空间,如上用户消息关联集合所示。
后台管理系统项目
后台管理系统使用了蚂蚁金服的antd UI组件和chartjs图表库,目前后台管理系统是一个半成品,只实现了审核文章,图表,注册,标签管理组件,其他路由组件待扩展更改。
后话
这个项目是我第一次写全栈开发,可能因为经验不足有些实现思路不是好的解决思路,如果有怎么建议可以在评论回复或issue。
本项目仅个人开发练习,不作为任何商业用途