什么是 elpis-core ?
elpis-core 是对 koa 应用框架的一层封装,是精简版的 Node.js 框架;本质就是应用加载器,可以通过内部的 loader 加载代码,这块代码必须是按照约定的方式目录结构以及格式来写的。也可以理解为是精简版的 egg.js 。
elpis-core 都做了什么?
elpis-core 本质上是一个"应用加载器";
- 初始化 koa 实例
- 按照约定自动加载业务代码(controller、service、middleware、... 等)
- 统一管理配置和环境
- 启动 HTTP 服务
elpis-core 文件结构
elpis-core/
├── index.js # 入口文件
├── env.js # 环境判断
├── utils.js # 工具函数
└── loader/ # 各类加载器
├── config.js # 配置加载器
├── controller.js # 控制器加载器
├── service.js # 服务层加载器
├── middleware.js # 中间件加载器
├── router.js # 路由加载器
├── router-schema.js # 路由参数校验 Schema 加载器
└── extend.js # 扩展加载器
loader 作用
loader 主要是把项目文件夹内容挂载到 koa 实例,目的就是实现分层架构,解耦模块间的依赖,每个模块都统一访问入口在 app 实例上访问。
项目文件结构
config/ → 项目配置
app/
├── controller/ → 处理请求、调用 service、返回响应
├── service/ → 业务逻辑层
├── middleware/ → 中间件(鉴权、日志、错误处理等)
├── router/ → 路由定义
├── router-schema/ → 路由校验规则
└── extend/ → 扩展 app 能力(如 logger)
| 模块 | 作用 |
|---|---|
| configLoader | 把 config/config.{env}.js 文件内容挂载到koa实例 |
| controllerLoader | 自动扫描 app/controller/**/*.js,并挂载koa实例 |
| middlewareLoader | 自动扫描 app/middleware/**/*.js,并挂载koa实例 |
| serviceLoader | 自动扫描 app/service/**/*.js,挂载koa实例 |
| routerSchemaLoader | 加载 app/router-schema/*.js,挂载到koa实例,用于 API 参数校验 |
| routerLoader | 自动扫描 app/router/**/*.js,注册到 koa-router,并挂载koa实例 |
| extendLoader | 加载app/extend/*.js,直接扩展 app 实例 |
koa 的洋葱圈模型
elpis-core 是对 koa 的封装,其中间件的执行顺序也是洋葱圈模型;请求从外层中间件进入,一层层向内传递,到达核心后再一层层向外返回。类似栈结构的先进后出,先进入的中间件最后也会在路过一次。
总结
通俗的来讲 elpis-core 就是项目的启动器,来启动按照我们约定的规则编写的项目,也就是极简版egg.js。