NestJS实战-产品需求规划
本文介绍 NestJS 实战的产品需求规划,介绍前后端技术栈、对业务需求模块进行功能规划、系统环境详细搭建和数据库表结构简单设计。
供自己以后查漏补缺,也欢迎同道朋友交流学习。
引言
之前写了有关 Node
和 NestJS
相关知识点的文章,但有些模块介绍的比较空洞,想着再写一篇 Nest
实战,搭建下最最基础的 CMS
内容后台管理系统。一方面自己在写的过程中也能再复习一遍,另一方面也能分享给大家做简单的参考。
另外也给大家推荐一个企业级 Node
若依全栈管理系统nest-admin, 也推荐徐小夕大佬的博客基于nestjs实现的若依全栈管理系统
Node基础和NestJS基础
对于不太了解 NodeJS
和 NestJS
的同学,请自行去官网看看;也可以看看我之前写的 NodeJS-基础学习 和 NodeJS-NestJS基础
技术栈介绍
前端这边打算用我最了解的 react
+ antd design pro
一套,后端就是要介绍的 NestJs
,数据库就最常用的 MySQL
+ TypeORM
。
- 前端:
React@18
+TypeScript
+ant design pro@6
+[email protected]
+UMI@4
- 后端:
NestJS
+TypeScript
+MySQL
+TypeORM
- 身份验证:
JWT
产品模块功能规划
产品规划这块儿,我之前是想用 墨刀
或 figma
画个简单的原型 UI 图,发现用起来挺复杂的,后来我就直接撸了一个简单的前端页面(反正要写的)。具体模块功能分为:登录模块
、账号管理
、权限管理
、文章管理
、专栏管理
。
登录模块
登录我们做的简单点,只支持用户名和密码登录,做一些简单的校验,登录后获取用户信息和 token
存储。
登录成功后,跳转到欢迎页面,一般来说是工作台,但我们示例里没啥数据就算了。
UI图:
账号这块主要是增删改查导出这些功能。具体的有:
- 列表查询:返回 list 数据
- 查询导出/批量导出:以数据流形式下载 excel
- 添加账号:添加账号名称、权限、密码
- 修改账号:修改账号名称、权限、密码
- 删除/批量删除:删除账号
UI图:
权限管理
有账号自然就要做点权限控制,我们的设计如下:
- 系统管理员:
systemAdmin
控制系统的一切 - 管理员:除了不能删除修改
systemAdmin
,目前其他操作都可以 - 用户:
user
不能对账号管理进行增删改操作,其他都可以 - 访客:
viewer
不能访问账号管理页面,其他页面也仅可以查看,不能增删改
文章管理
文章模块是我们的核心模块。具体的有:
- 列表查询:查询文章列表,展示文章ID、名称、描述、所属专栏、创建时间、创建人、更新时间
- 新建文章:新建文章
- 编辑文章:编辑文章详情
- 删除文章:删除某个 id 的文章
- 发布文章:设置标题名、收录至专栏、编辑摘要
UI图:
专栏管理
专栏管理模块负责管理文章移到不同的专栏里:
- 专栏列表查询:专栏列表查询,展示专栏的标题、收录文章数量、专栏描述、创建时间
- 新建专栏:新建专栏,添加名称、简介
- 修改专栏:修改专栏,修改名称、简介
- 删除专栏:根据id删除专栏
- 专栏详情:跳转到专栏详情,去管理某个专栏
- 专栏详情-文章列表查询:某个专栏所有的文章列表,展示标题、更新时间、文章描述
- 专栏详情-取消收录/批量取消收录:取消收录某个文章至该专栏
- 收录至专栏-非该专栏文章列表查询:查询非某个专栏的文章
- 收录至专栏-提交:收录至某个专栏。
UI图:
系统环境搭建
请求响应加密封装
后端 NestJS
使用 crypto
来实现数据加解密,使用 RSA
非对称加密算法和 AES
的对称加密算法进行混合加密,RSA 公钥对 AES 密钥进行加密,AES 对数据进行加密。
同时前端对接口的请求方法进行封装,提供 url
、params
、config
参数给到调用方。
身份验证
使用 @nestjs/jwt
、passport-jwt
和 @nestjs/passport
创建 JWT
的身份验证服务,使用 AuthGuard
创建一个守卫保护路由。
异常处理
使用 @ControllerExceptionFilter()
装饰器创建一个全局异常过滤器,来捕获控制器中抛出的所有异常。
安全性
前后端都要做一些基础的安全性校验和拦截:
- 数据验证:对输入的数据进行必要的格式、类型和长度校验,避免
SQL
注入、XSS
等攻击。 - 防范跨站脚本攻击 (XSS):确保用户生成的内容在输出前进行转义处理,
NestJS
内置的管道可以帮助自动转义输出。 - 防止跨站请求伪造 (CSRF):使用
CSRF
保护模块,为每个请求生成唯一的令牌,并将其与用户会话关联。
API 文档
在 NestJS
中集成 Swagger
生成 API
文档,再使用 Apifox
导入 Swagger
文档,进行接口测试和文档管理。
单元测试
使用 Jest
作为测试框架,针对服务、控制器等组件进行单元测试,在 Apifox
中,创建测试用例来对接口进行测试,包括设置请求参数、预期结果和断言。也可以将多个接口请求组合成一个测试流程,模拟真实的业务逻辑。
服务监控
使用 nestjs-prometheus
来集成 Prometheus
监控系统,监控应用的各种指标,如 HTTP 请求时间、错误率、内存使用等。还可以使用 Grafana
来可视化 Prometheus
收集的指标数据,构建监控大盘,实现实时性能监控和报警机制。
日志记录
使用 nest-winston
集成 winston
来进行日志记录,并配置 winston 的传输方式,如控制台、文件、每日轮换文件等。
创建中间件来记录每个请求的信息,如请求方法、URL、IP 地址、状态码和响应时间。可以在请求结束时记录日志,并且可以根据响应状态码来决定日志级别。
数据库表结构设计
用户表 user
- id (主键)
- username (用户名)
- password (密码哈希)
- role_id (权限id 外键 关联role表)
- created_time (创建时间)
- created_by_id (创建人id)
- is_deleted (是否删除 0删除 1不删除)
角色权限表 role
- id (主键)
- type (类型)
- name (名称)
- index (权重)
文章表 article
- id (主键)
- title (文章名称)
- desc (文章描述)
- created_time (创建时间)
- created_by_id (创建人id 外键 关联user表)
- update_time (更新时间)
- update_by_id (更新人id 外键 关联user表)
- is_deleted (是否删除 0删除 1不删除)
专栏文章关联表 article_column
一对多,一篇文章可以收录至多个专栏
- id (主键)
- article_id (文章id 外键 关联article表)
- column_id (专栏id 外键 关联column表)
专栏表 column
- id (主键)
- title (专栏标题)
- desc (专栏描述)
- created_time (创建时间)
- created_by_id (创建人id 外键 关联user表)
- is_deleted (是否删除 0删除 1不删除)
参考文档
- 徐小夕大佬的博客基于nestjs实现的若依全栈管理系统
- 企业级Node若依全栈管理系统nest-admin
标签:实战,删除,账号,专栏,NestJS,文章,规划,id From: https://blog.csdn.net/weixin_47588164/article/details/142516441原文链接:https://juejin.cn/post/7416499669629780009