Koa 中集成 Elpis-Core
一、Elpis-Core 是什么?
Elpis-Core 是基于 Node.js + Koa 封装的企业级开发框架核心层,本质是「Koa 生态的工程化增强工具 + 约定式开发运行时」—— 它不替代 Koa,而是在 Koa 基础上解决「模块加载、目录规范、配置管理」等工程化问题,让开发者无需关注繁琐的脚手架配置,专注写业务代码。
二、Elpis-Core 的目的?
通过技术封装、规范注入、能力扩展三大核心动作,解决 Node.js 原生 / 开源生态的 “通用化” 与团队业务 “定制化” 之间的矛盾
特性
-
基于 Koa 洋葱圈模型,支持 async/await
-
自动加载 controller /middleware/service /router
-
约定大于配置,统一项目结构
-
内置参数校验、路由 schema、应用扩展
-
支持数据库统一交互与连接管理
-
轻量、可扩展、适合中后台服务
洋葱圈模型
三、基于这个洋葱圈模型,进行项目架构搭建
-
左侧(静态文件) :需要按约定目录存放业务代码
app/config/**/*.js:配置环境(本地/测试/生产)app/middleware/**/*.js:中间件(请求拦截 / 增强)app/router-schema/**/*.js:路由校验规则(参数校验 Schema)app/router/**/*.js:路由定义(URL 映射)app/controller/**/*.js:控制器(处理请求入口)app/service/**/*.js:业务服务(核心业务逻辑)app/extend/**/*.js:框架扩展(给 Koa 实例挂载自定义方法)
-
中间(elpis-core Loader) :核心加载器
- 它会自动扫描约定目录下的所有文件
- 解析文件导出的模块(Controller/Service 等)
- 按目录语义,将这些模块 ** 挂载到右侧的 Koa 实例(app)** 上
-
右侧(运行时动态) :Koa 实例
app上挂载了所有业务模块-
app.config:不同环境下的配置 -
app.middleware:所有中间件 -
app.routerSchema:所有路由校验规则 -
app.router:所有路由 -
app.service:所有服务 -
app.controller:所有控制器 -
app.routerSchema:所有路由校验规则 -
app.[对应文件名]:扩展模块自动挂载到 app 上 -
最终,实现 通过特定 的方式进行访问:
app.config.${文件}(config.环境.js)app.middlewares.${目录}.${文件}app.routerSchema.${接口路口}app.router.${文件}app.controller.${目录}.${文件}app.service.${目录}.${文件}app.${文件}
-
四、相关中间件和插件的理解
1、koa-static 静态资源
为了解决静态资源的加载,可以在app/public目录下自动加载相关的静态资源,如:css、png等。
2、koa-nunjucks-2 模板渲染引起
用于服务器端渲染 HTML(SSR)
3、koa-bodyparser 模板渲染引起
koa-bodyparser 用于解析 HTTP 请求体,并将数据挂载到 ctx.request.body ,因为Koa 默认无法直接获取请求体中的 body 数据。
4、log4js 日志工具,属于extend拓展功能
外部调用 app.logger.info app.loger.error
通过插件把日志输出并落地到磁盘
5、error-handler 运行时错误捕获
对一些异常的报错进行处理,避免用户请求服务出问题,返回一些不必要的内容
6、api-params-verify 参数校验
通过 json-schema & ajv 对 API 规则进行约束,配合 api-params-verify 中间使用
7、api-sign-verify API签名合法性校验
前后端约定好一个signKey,前端通过在请求头中,传 signKey + 时间 进行md5加密,传给后端。后端利用signKey 和 传过来的时间,进行md5加密,对比是否一致,从而判断接口的合法性
五、总结
1、通过实现elpis-core的封装,加深了模块化的理解。每一层的中间件都是紧密关联,为了下一层中间件而做准备。 router、controlller、service,三者形成了MVC模型,而elpis-core可以理解为更好的去使用这个MVC模型
2、写代码之前,需要先分析逻辑,每一步写上注释,先处理数据,再进行下一步的操作