因为工作原因接触了Nodejs,前后端代码风格的一致性对于前端出生的小伙伴是十分友好的,TypeScript也提供了比JavaScript更加强大的特性,而且环境搭建也比较简单。具体的都不在此处介绍了,本人也是尝试着搭建一个后台管理系统,采用的是KOA框架。但是始终还是觉得太前端化了,在使用的时候需要关心一些参数传递的机制和其他一些细枝末节的额外工作,使用起来并没有Java/.net等老牌的框架来的“爽” 。网上也搜索了一下相关资料,NPM库中也有一些组件可以实现一些命名控件传参、Controller层的注解等特性,所以我就使用这些依赖和组件来实现一个与Java差不多的后台开发框架,一起分享给大家吧!
目录
一、开发环境
Node 版本为 v20.0.0,其他版本的Node并没有进行实际的测试,编辑器是VSCode 。
具体如何安装就不再介绍了,未接触过的小伙伴请先学习基础知识哦!
后端使用 Typescript(TS)
前端使用 Typescript(TS) + Vue3 + Vite
前端是别人的开源项目拉过来直接改的,本文不进行介绍了。
最后会附上前端和后端完整的代码,有需要的小伙伴直接拿走吧。
二、目标特性
后台框架就先支持如下特性:
1. 支持分层开发
并分为DTO层、Entity层、Controller层、Service层、Data层。
2. 使用命名空间参数传递
通过命名空间来对临时变量进行传递,例如来解决Session传递繁琐的问题。
因为在KOA的框架中,类似Session必须借助ctx通过洋葱模型的顺序进行层层传递。
3. 使用路由注解
如果在原生的KOA框架的路由组件,每新增一个Controller都要修改一下对应的路由文件。
为了解决这种繁琐方式和增加代码可读性,这里我们直接使用注解的方式来实现路由。
4. 使用ORM
一般的项目中使用ORM是非常必要的,因此这边也使用ORM来对数据进行操作。
二、依赖选用
组件 | 介绍 |
JWT | 用户身份认证 |
Sequelize | 一款人气还不错的ORM |
Log4js | 日志记录 |
routing-controllers | 路由注解组件 |
class-transformer | 类型转换,主要用于DTO和Entity的转换 |
cls-hooked | 命名控件传递信息 |
Koa | 热门的开发框架 |
除了上面一些依赖组件的外,还会用到一些其他的基础依赖,例如Typescript的解释器等等。
三、目录结构
后端项目中目录结构如下所示
目录/文件 | 描述 |
src | 后台代码 |
- config | 存放所有的配置文件,如数据库配置,日志配置等 |
- controller | 存放所有的controller层文件 |
- dao | 存放所有的data层的文件 |
- dto | 存放所有的DTO类的文件 |
- error | 存放错误代码定义文件,来统一后台错误信息 |
- middlewares | 存放koa的中间层代码 |
- models | 存放Entity实体类文件 |
- sequlize | 存放ORM初始化文件 |