elpis总结——基于koa的elpis-core

什么是 elpis-core ?

elpis-core 是对 koa 应用框架的一层封装,是精简版的 Node.js 框架;本质就是应用加载器,可以通过内部的 loader 加载代码,这块代码必须是按照约定的方式目录结构以及格式来写的。也可以理解为是精简版的 egg.js 。

elpis-core 都做了什么?

elpis-core 本质上是一个"应用加载器";

  1. 初始化 koa 实例
  2. 按照约定自动加载业务代码(controller、service、middleware、... 等)
  3. 统一管理配置和环境
  4. 启动 HTTP 服务

elpis-core 文件结构

ruby 复制代码
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 实例上访问。

项目文件结构

arduino 复制代码
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。

相关推荐
阿慧勇闯大前端5 小时前
在AI时代,再去了解react19新特性还有用吗? 最近总有朋友问我:“现在AI写代码这么厉害了,我写个需求丢给ChatGPT,几秒钟就生成一堆组件,还学新特
前端·react.js
秋水无痕5 小时前
从零搭建个人博客系统:Spring Boot 多模块实践详解
前端·javascript·后端
陆枫Larry5 小时前
图片预览前先 filter 掉空地址:一个容易忽略的细节
前端
我叫蒙奇5 小时前
rem 适配全过程
前端
陆枫Larry5 小时前
小程序中按固定宽高比展示图片并去除黑边的实现思路
前端
HelloReader5 小时前
Tauri 2.1 新特性自定义 HTTP Headers 配置详解
前端
一点一一6 小时前
从输入URL到页面加载:浏览器多进程/线程协同的完整逻辑
前端·面试
HelloReader6 小时前
Tauri 的安全架构Capabilities 与 CSP
前端
阿懂在掘金6 小时前
Vue 表单避坑(二):多个 v-model 同时更新,为什么数据丢了?
前端·vue.js