当前位置: 首页 > news >正文

elpis全栈课程学习之elpis-core学习总结

elpis全栈课程学习之elpis-core学习总结

核心原理

elpis-core是全栈框架elpis的服务端内核,主要应用于服务端接口的开发以及页面的SSR渲染,elpis-core基于约定优于配置的原理,通过一系列的loader来加载对应的文件,大大节约用户的开发成本。elpis-core使用户的注意力使用始终集中于业务开发,而无需关注其他。

elpis-core目录结构

├─ 📁elpis-core
│  ├─ 📁loader
│  │  ├─ 📄config.js
│  │  ├─ 📄controller.js 
│  │  ├─ 📄extend.js
│  │  ├─ 📄middleware.js
│  │  ├─ 📄router-schema.js
│  │  ├─ 📄router.js
│  │  └─ 📄service.js
|  │  ├─ 📁utils
│  ├─ 📄env.js
│  ├─ 📄index.js
├─ 📄index.js

elpis-core应用的目录机构

├─ 📁app
│  ├─ 📁controller // 存放业务处理文件,进行业务逻辑的处理
│  ├─ 📁extend // 存放拓展文件,比如:日志文件...
│  ├─ 📁middleware // 中间件逻辑处理,挂载到koa实例进行一系列的处理
│  ├─ 📁public
│  │  ├─ 📁output
│  │  └─ 📁static
│  ├─ 📁router // 路由文件
│  ├─ 📁router-schema // 对 router 规则校验的文件 
│  ├─ 📁service // 服务层的文件,主要用于服务端的交互
│  └─ 📄middleware.js // 全局的中间件

loader具体实现原理

通过glob这个库读取相对应的目录,加载每个目录下的文件并挂载到Koa实例上

controller-loader模块的代码实现

// 读取app/controller下所有文件
const fileList = readFile(`.${sep}controller`, `.${sep}**${sep}**.js`, app)
const controllers = {}
fileList.forEach(file => {
    // 提取文件名称
    let name = path.resolve(file)
    // 截取路径
    name = subPath(name, 'controller')
    // 将custom-module/custom-controller -> customModule/customController
    name = toCamelCase(name)
    //挂载controller到app实例
    let tempController = controllers
    const names = name.split(sep) // [customModule, customController]
    for (let i = 0, len = names.length; i < len; i++) {
        if (i === len - 1) {
            const ControllerModule = require(path.resolve(file))(app)
            // 是文件
            tempController[names[i]] = new ControllerModule()
        } else {
            // 文件夹
            if (!tempController[names[i]]) {
                tempController[names[i]] = {}
            }
            tempController = tempController[names[i]]
        }
    }
})
app.controller = controllers

注:其余模块的loader与其类似,这里不过多赘述

总结

以上内容来源于抖音哲玄前端博主的全栈实践课程,结合我的理解进行的思路整理,如有误,欢迎各位大佬指正。

相关文章:

  • Virtual Box虚拟机安装Mac苹果Monterey和big sur版本实践
  • UI设计——新拟态手机主题锁屏设计分享
  • vmware安装firepower ftd和fmc
  • 计算机毕业设计SpringBoot+Vue.js网上摄影工作室管理系统(源码+文档+PPT+讲解)
  • vector 面试点总结
  • 【Python机器学习】1.2. 线性回归理论:一元线性回归、最小化平方误差和公式(SSE)、梯度下降法
  • C++ 类和对象(上)
  • 使用 REINFORCE 算法强化梯度策略
  • AcWing 蛋糕游戏
  • CSS3(媒体查询、媒体类型、媒体特性、媒体运算符、BFC)
  • Pytest之parametrize参数化
  • 如何使用Spring Boot框架整合Redis:超详细案例教程
  • Java数据结构第十六期:走进二叉树的奇妙世界(五)
  • DeepSeek MLA(Multi-Head Latent Attention)算法浅析
  • Qt的坐标
  • TrustRAG:通过配置化模块化的检索增强生成(RAG)框架提高生成结果的可靠性和可追溯性
  • Redis - 高可用实现方案解析:主从复制与哨兵监控
  • drawDB:一款免费数据库设计工具
  • 从基础到进阶的Java学习技术指南
  • Spring Boot 测试:单元、集成与契约测试全解析
  • wordpress wpgo/seo在线外链
  • 网站开发技术现状/平台推广方案
  • 南昌网站推广排名/电脑编程培训学校
  • 做网站公司名字/淘客推广怎么做
  • 一些难以发现的网站/流量查询网站
  • 一个平台怎么推广/seo内容优化方法