Nodejs-Koa基于分层理念的框架搭建(附完整TS源码)

因为工作原因接触了Nodejs,前后端代码风格的一致性对于前端出生的小伙伴是十分友好的,TypeScript也提供了比JavaScript更加强大的特性,而且环境搭建也比较简单。具体的都不在此处介绍了,本人也是尝试着搭建一个后台管理系统,采用的是KOA框架。但是始终还是觉得太前端化了,在使用的时候需要关心一些参数传递的机制和其他一些细枝末节的额外工作,使用起来并没有Java/.net等老牌的框架来的“爽” 。网上也搜索了一下相关资料,NPM库中也有一些组件可以实现一些命名控件传参、Controller层的注解等特性,所以我就使用这些依赖和组件来实现一个与Java差不多的后台开发框架,一起分享给大家吧!

目录

一、开发环境

二、目标特性

二、依赖选用

三、目录结构

四、洋葱模型

五、Controller 层

5.1 新增 Controller

5.2 注册 Controller

六、Service层

6.1 新增业务接口

6.1 实现业务接口

七、Data/Dao层

八、Models层

九、KOA中间件

9.1 添加中间件

9.2 日志中间件介绍

9.3 异常处理中间件介绍

9.4 session 中间件

9.5 事务处理中间件

十、源码


一、开发环境

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初始化文件
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,而 Koa 是一个由 Express 原班人马打造的轻量级、灵活的 Node.js Web 框架Koa 提供了一组丰富的功能,使得开发者可以快速构建高效、安全的 Web 应用和 API。 在 Linux 后端项目中,使用 Koa 框架可以带来以下优势: 1. **中间件机制**:Koa 的中间件机制非常强大,允许开发者通过级联的方式处理 HTTP 请求。这种设计使得代码更加模块化和可维护。 2. **轻量级**:Koa 本身非常轻量,不会强制开发者使用任何特定的中间件,这使得开发者可以自由选择适合项目的中间件。 3. **异步编程**:Koa 基于 async/await 语法,使得异步代码更加简洁和易读。 4. **高性能**:由于其轻量级设计和高效的异步处理,Koa 在处理高并发请求时表现出色。 以下是一个简单的 Koa 应用示例: ```javascript const Koa = require('koa'); const app = new Koa(); // 中间件1:记录请求时间 app.use(async (ctx, next) => { const start = Date.now(); await next(); const ms = Date.now() - start; ctx.set('X-Response-Time', `${ms}ms`); }); // 中间件2:响应内容 app.use(async ctx => { ctx.body = 'Hello, Koa!'; }); app.listen(3000, () => { console.log('Server running on http://localhost:3000'); }); ``` 在这个示例中,我们创建了一个简单的 Koa 应用,并添加了两个中间件。第一个中间件记录请求处理时间,第二个中间件返回响应内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值