elpis-core基于KOA实现的企业级内核引擎

49 阅读5分钟

前言

学习课程来自于抖音“哲玄前端”课程(《大前端全栈实践课》),全栈全流程开发一个支持多网站建设的应用框架---Elips,能够通过配置化沉淀80%的重复性工作,同时提供各种各样的定制化能力,可以灵活的支持剩余20%的定制化需求。elpis-core作为整个应用的基础,提供了一套完整的加载和初始化机制,本文将浅谈一下elpis-core的设计理念,核心模块以及在项目中的应用。

elpis-core设计

1、核心定位

elpis-core作为Elpis的核心,主要负责:

  • 模块加载:统一加载和初始化项目中的各种模块
  • 中间件管理:提供中间件的加载和注册机制
  • 路由系统:实现路由的注册和处理
  • 环境管理:支持不同环境(本地、测试、生产)的配置

2、目录结构

image.png

核心模块解析

1、环境管理(env.js)

环境管理模块负责识别当前运行环境,并提供环境相关判断方法:

  • 环境识别:通过NODE_ENV环境变量判断当前环境
  • 环境方法:提供isLocal、isBeta、isProd等方法,方便其他模块根据不同环境执行不同逻辑
  • 配置加载:根据不同环境加载对应的配置文件

2、模块加载器

2.1配置加载(config.js)

配置加载器负责加载和合并配置文件:

  • 默认配置:加载config.default.js作为配置基础
  • 环境配置:根据当前环境加载对应配置文件(如config.local.js)
  • 配置合并:将环境合并到默认配置,形成最终的app.config
2.2中间件加载(middleware.js)

中间件加载器负责加载项目中的中间件:

  • 目录扫描:扫描app/middleware目录下的所有中间件文件
  • 驼峰命名:将文件转为驼峰命名,便于访问
  • 内存挂载:将中间件挂载到app.middlewares上,便于全局访问
2.3路由加载(router.js)

路由加载器负责注册项目中的路由:

  • 目录扫描:扫描app/router目录下的所有路由文件
  • 路由注册:将路由注册到KoaRouter实例上
  • 兜底路由:提供默认的重定向(也可通过启动配置参数配置)
2.4控制器加载(controller.js)

控制器加载器负责加载项目中的控制器:

  • 目录扫描:扫描app/controller目录下的所有控制器文件
  • 内存挂载:将控制器挂载到app.controller上,方便路由调用
2.5服务加载(service.js)

服务加载器负责加载项目中的服务:

  • 目录扫描:扫描app/service目录下的所有服务文件
  • 内存挂载:将服务挂载到app.service上,方便控制器调用
2.6路由schema加载(router-schema.js)

路由schema加载器负责加载路由的参数验证规则:

  • 目录扫描:扫描app/router-schema目录下的所有schema文件
  • 内存挂载:将schema挂载到app.routerSchema上,方便参数验证
2.7扩展加载(extend.js)

扩展加载器负责加载项目中的扩展:

  • 目录扫描:扫描app/extend目录下的所有扩展文件
  • 全局挂载:将扩展挂载到对应对象上,如app、ctx等

核心执行流程

1.应用启动流程

当执行ElpisCore.start()时,核心执行流程如下:

  1. 初始化应用:创建Koa实例,设置基础路径和业务路径
  2. 加载环境:初始化环境管理,识别当前运行环境
  3. 加载模块:按照依赖关系加载各个模块(配置-扩展-服务-控制器-中间件-路由Schema)
  4. 注册中间件:注册全局中间件
  5. 注册路由:注册项目中的路由
  6. 启动服务:监听指定端口,启动HTTP服务

2.请求处理流程

当收到HTTP请求时,处理流程如下:

  1. 全局中间件:执行全局中间件(如静态文件、模板渲染、请求体解析等)
  2. API中间件:执行API相关的中间件(如签名验证、参数验证等)
  3. 路由中间件:执行路由中间件,匹配路由并添加路径参数
  4. 控制器:执行对应的控制器方法,处理业务逻辑
  5. 响应返回:返回响应给客户端

elpis-core在项目中的应用

1.API参数验证

使用api-params-verify中间件进行API参数验证:

  • 动态路由匹配:支持动态路由的参数验证
  • 多维度验证:验证headers、body、query、params等参数
  • 实时日志:记录请求参数和验证结果
  • 错误处理:验证失败时统一返回错误响应

2.路由管理

项目的路由管理特点:

  • 模块化:按功能模块组织路由文件
  • 动态路由:支持路径参数的动态路由
  • 路由Schema:通过Schema定义参数验证规则
  • 统一处理:提供默认的404处理

3.环境配置

项目环境配置特点:

  • 多环境支持:支持本地环境、测试环境、生产环境
  • 配置覆盖:环境配置覆盖默认配置
  • 错误处理:提供详细的配置加载错误信息
  • 全局访问:通过app.config全局访问配置

总结

1. 模块化设计

elpis-core 采用模块化设计,将不同功能分离到独立的加载器中:

  • 职责单一 :每个加载器只负责一种类型的模块加载
  • 易于维护 :模块间边界清晰,便于维护和扩展
  • 可测试性 :每个模块可以单独测试

2. 依赖管理

elpis-core 合理管理模块间的依赖关系:

  • 加载顺序 :按照依赖关系从底层到上层加载
  • 避免循环依赖 :确保被依赖的模块先加载
  • 灵活性 :依赖关系变化时易于调整

3. 错误处理

elpis-core 提供了完善的错误处理机制:

  • 详细的错误信息 :区分文件不存在和代码异常
  • 路径显示 :显示具体的文件路径,便于定位问题
  • 容错处理 :即使配置文件不存在,也能正常启动

4. 扩展性

elpis-core 具有良好的扩展性:

  • 插件机制 :通过中间件和扩展机制支持功能扩展
  • 自定义加载 :支持自定义模块的加载
  • 配置灵活 :通过配置文件调整系统行为