首页 > 其他分享 >NestJS实战-产品需求规划

NestJS实战-产品需求规划

时间:2024-09-27 09:52:00浏览次数:3  
标签:实战 删除 账号 专栏 NestJS 文章 规划 id

NestJS实战-产品需求规划

本文介绍 NestJS 实战的产品需求规划,介绍前后端技术栈、对业务需求模块进行功能规划、系统环境详细搭建和数据库表结构简单设计。

供自己以后查漏补缺,也欢迎同道朋友交流学习。

引言

之前写了有关 NodeNestJS 相关知识点的文章,但有些模块介绍的比较空洞,想着再写一篇 Nest 实战,搭建下最最基础的 CMS 内容后台管理系统。一方面自己在写的过程中也能再复习一遍,另一方面也能分享给大家做简单的参考。

另外也给大家推荐一个企业级 Node 若依全栈管理系统nest-admin, 也推荐徐小夕大佬的博客基于nestjs实现的若依全栈管理系统

Node基础和NestJS基础

对于不太了解 NodeJSNestJS 的同学,请自行去官网看看;也可以看看我之前写的 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 对数据进行加密。

同时前端对接口的请求方法进行封装,提供 urlparamsconfig 参数给到调用方。

身份验证

使用 @nestjs/jwtpassport-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不删除)

参考文档

原文链接:https://juejin.cn/post/7416499669629780009

标签:实战,删除,账号,专栏,NestJS,文章,规划,id
From: https://blog.csdn.net/weixin_47588164/article/details/142516441

相关文章

  • PyQt项目实战-(Pyqt5+mysql制作一个TODO清单 第一部分)
    PyQt项目实战Pyqt5实现todolist工作待办的增、改、删、查功能,连接mysql存储数据(待办事项)。目录目录        1.界面设计    2.功能实现    3.界面各Button点击事件和槽函数的链接    4.mysql数据库操作工具类    5.槽函数实现......
  • 【Bevy实战】2D场景下Camera实践
    Bevy,一个用Rust构建的令人耳目一新的简单数据驱动游戏引擎。如果你是一名Rust开发者,同时又对游戏开发比较感兴趣,那么Bevy一定是你会接触甚至是使用的游戏引擎。当然,本文关注的重点并不是来介绍Bevy,以及它的一些基本概念,关于这块的内容读者完全可以到Bevy的官网、Github主页进行学......
  • 影刀RPA实战:网页爬虫之天猫商品数据
    1.实战目标1.1实战目标在电商行业,我们经常爬取各个平台的商品数据,通过收集和分析这些商品数据,企业可以了解市场趋势、消费者偏好和竞争对手的动态,从而制定更有效的市场策略。爬取商品数据对于企业在市场竞争中把握先机、优化运营策略、提升产品和服务质量具有重要的价值分......
  • 渗透测试怎么做?看看大神一次完整的渗透测试实战
     在网络安全的世界里,渗透测试是一项关键的技术。你是否曾好奇,安全领域的专家们是如何一步步攻破一个系统的?今天我们将带你走进一次完整的渗透测试实战,让你体验大神级别的渗透技巧。渗透测试究竟是如何进行的?从信息收集到漏洞利用,再到权限提升,每一个步骤都至关重要。渗透测试......
  • Java毕业设计-基于SSM框架的超市会员(积分)管理系统项目实战(附源码+论文)
    大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。......
  • Java毕业设计-基于SSM框架的供电所档案管理系统项目实战(附源码+论文)
    大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。......
  • Java毕业设计-基于SSM框架的宠物领养系统项目实战(附源码+论文)
    大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。......
  • BigDecimal 详解与实战
    BigDecimal详解与实战JavaBigDecimal完整指南引言什么是`BigDecimal`?创建`BigDecimal`对象常用方法示例代码注意事项实际运用金融计算示例代码:商业应用示例代码:科学计算示例代码:数据汇总和统计示例代码:为什么选择`BigDecimal`?JavaBigDecimal完整指南......
  • 全球便携式航海无线电市场规划预测:未来六年CAGR为4.2%
    本文深入分析了便携式航海无线电市场的发展趋势、投资机会与挑战。通过对行业增长点、风险评估及未来展望的探讨,结合恒州诚思研究的数据洞察,为投资者提供了宝贵的信息和策略建议。一、引言随着海洋活动的增加,对于便携式航海无线电的需求也随之增长。这些设备在船舶通讯、紧急救援......
  • 【项目实战】生命体征监测芯片ADPD7000调试
    概要ADPD7000作为多模式生命体征监测传感器前端,可以做到心率、心电、血氧、体脂等生命体征进行实时监测。极小的封装及强悍的功能用在小小的手表手环上,就可以测量出人体的多项数据。以下技术实现过程,具体一定驱动基础的伙伴能秒懂。技术细节硬件原理:驱动配置:以上P4_......