Elpis
Elpis 是一个基于 Koa.js 的轻量级 Node.js Web 框架,提供了一套优雅的应用程序结构和加载机制。
里程碑一:elpis-core 核心基础应用
1. 整体架构概述
Elpis 框架采用了分层架构设计,核心理念是"约定优于配置"。整个框架由以下几个核心部分构成:
ruby
elpis/
├── elpis-core/ # 核心框架层
│ ├── index.js # 框架启动入口
│ ├── env.js # 环境管理模块
│ └── loader/ # 自动加载器集合
│ ├── config.js # 配置加载器
│ ├── controller.js # 控制器加载器
│ ├── service.js # 服务加载器
│ ├── middleware.js # 中间件加载器
│ ├── router.js # 路由加载器
│ ├── router-schema.js # 路由验证加载器
│ └── extend.js # 扩展加载器
├── app/ # 应用层
│ ├── controller/ # 控制器层
│ ├── service/ # 服务层
│ ├── middleware/ # 中间件层
│ ├── router/ # 路由层
│ ├── router-schema/ # 路由参数验证
│ ├── extend/ # 框架扩展
│ └── middleware.js # 全局中间件配置
└── config/ # 配置层
├── config.default.js # 默认配置
├── config.local.js # 本地环境配置
├── config.beta.js # 测试环境配置
└── config.prod.js # 生产环境配置
2. 核心框架实现原理
2.1 启动流程(elpis-core/index.js)
框架启动遵循严格的加载顺序,确保依赖关系的正确性:
javascript
// 启动顺序
1. 创建 Koa 实例
2. 初始化基础路径配置
3. 环境配置初始化 (env.js)
4. 中间件加载 (middleware loader)
5. 路由Schema加载 (router-schema loader)
6. 控制器加载 (controller loader)
7. 服务加载 (service loader)
8. 配置加载 (config loader)
9. 扩展加载 (extend loader)
10. 全局中间件注册 (app/middleware.js)
11. 路由注册 (router loader)
12. 启动服务器监听
2.2 环境管理系统(env.js)
提供了统一的环境管理机制,支持本地、测试、生产三种环境:
javascript
// 环境检测方法
app.env.isLocal() // 本地环境
app.env.isBeta() // 测试环境
app.env.isProduction() // 生产环境
app.env.get() // 获取当前环境
环境配置通过 process.env._ENV
环境变量控制,支持容器化部署和CI/CD流程。
2.3 自动加载机制
框架实现了 7 个核心加载器,采用约定式文件命名和目录结构:
a) 中间件加载器(middleware.js)
- 自动扫描
app/middleware/**/*.js
文件 - 支持多级目录结构
- 文件名自动转换为驼峰命名(kebab-case → camelCase)
- 通过
app.middlewares.${目录}.${文件}
访问
b) 控制器加载器(controller.js)
- 自动扫描
app/controller/**/*.js
文件 - 自动实例化控制器类
- 支持继承基础控制器(BaseController)
- 通过
app.controller.${目录}.${文件}
访问
c) 服务加载器(service.js)
- 自动扫描
app/service/**/*.js
文件 - 自动实例化服务类
- 支持继承基础服务(BaseService)
- 通过
app.service.${目录}.${文件}
访问
d) 路由加载器(router.js)
- 自动扫描
app/router/**/*.js
文件 - 集成 Koa-Router
- 提供默认的 404 重定向处理
- 支持 RESTful API 设计
e) 路由Schema加载器(router-schema.js)
- 加载 JSON Schema 定义用于API参数验证
- 配合 AJV 进行参数校验
- 支持 headers、body、query、params 四种参数类型验证
f) 配置加载器(config.js)
- 支持多环境配置文件
- 配置合并机制:环境配置覆盖默认配置
- 通过
app.config
统一访问
g) 扩展加载器(extend.js)
- 动态扩展框架功能
- 防止命名冲突检测
- 直接挂载到 app 实例
3. 分层架构设计
3.1 控制器层(Controller Layer)
采用面向对象设计,提供了 BaseController 基类:
javascript
// 统一的API响应格式
this.success(ctx, data, metadata) // 成功响应
this.failed(ctx, message, code) // 失败响应
控制器职责:
- 处理HTTP请求和响应
- 参数解析和验证
- 调用服务层业务逻辑
- 返回标准化的API响应
3.2 服务层(Service Layer)
业务逻辑层,提供了 BaseService 基类:
javascript
// 内置工具
this.app // app实例访问
this.config // 配置访问
this.superagent // HTTP客户端
服务层职责:
- 实现核心业务逻辑
- 数据处理和转换
- 外部服务调用
- 数据持久化操作
3.3 中间件层(Middleware Layer)
提供了丰富的中间件支持:
a) 异常处理中间件(error-handler.js)
- 全局异常捕获
- 统一错误响应格式
- 日志记录
- 404页面重定向
b) API参数验证中间件(api-params-verify.js)
- 基于 JSON Schema 的参数验证
- 支持多种参数类型验证
- 详细的验证错误信息
c) API签名验证中间件(api-sign-verify.js)
- API安全验证机制
- 防止恶意请求
4. 配置系统设计
采用分环境配置管理:
javascript
// 配置优先级
环境特定配置 > 默认配置
// 配置文件映射
local → config.local.js
beta → config.beta.js
production → config.prod.js
支持配置热加载和动态覆盖,便于不同环境的部署和调试。
5. 扩展机制
5.1 日志扩展(logger.js)
提供了环境相关的日志处理:
javascript
// 本地环境:控制台输出
// 其他环境:文件落地 + 日志切分
app.logger.info() // 信息日志
app.logger.error() // 错误日志
特性:
- 按日期自动切分日志文件
- 支持多种日志级别
- 生产环境日志持久化
5.2 扩展开发规范
- 避免覆盖框架核心属性
- 命名冲突检测机制
- 统一的扩展接口设计
6. 里程碑一总结
elpis-core 核心框架已经实现了一个完整的企业级Web应用基础架构:
✅ 完成的核心功能:
- 自动加载机制 - 7个核心加载器
- 分层架构设计 - Controller/Service/Middleware
- 环境管理系统 - 支持多环境部署
- 配置管理系统 - 分环境配置覆盖
- 扩展机制 - 灵活的框架扩展能力
- 异常处理 - 全局错误捕获和处理
- 参数验证 - 基于JSON Schema的API验证
- 日志系统 - 分环境的日志处理
✅ 架构优势:
- 约定优于配置,减少开发配置工作
- 分层清晰,职责分离,易于维护
- 自动化程度高,提升开发效率
- 扩展性强,支持插件化开发
- 企业级特性,支持多环境部署
这个核心框架为后续的业务功能开发奠定了坚实的基础,提供了标准化的开发规范和强大的基础设施支持。