业务框架封装及处理方式
为了选择合适的底层框架,小编整理了awesome-nodejs的仓库(每个分类按github star数排序),从Web框架部分可以看到非常丰富,那么我们如何选择。 awesome-nodejs地址: https://github.com/huaize2020/awesome-nodejs/blob/main/README-zh-CN.md 主流的Web框架选型主要分为两大流派,基于Express 和 基于Koa,他们都是由同一团队打造。Express和Koa在设计思路上的区别在于: Express本身功能内置了很多中间件,集成度高,使用省心,上手即用; Koa使用精简的内核,更轻量,使用需要使用者做技术选型按需搭建积木; 基于以上的设计思路上的差别,基于对灵活配置型的考虑,笔者选择了 基于Koa 的 流派。但他们都太底层,对于搭建企业级业务框架还需要做较多定制。 Egg.js是什么基于上述的诉求,最后小编选择了Egg.js。 Egg.js地址:https://eggjs.org/zh-cn/ Egg.js是阿里开源的基于Koa2企业级Node.JS框架,其核心设计就是希望基于Egg.js孕育出更多上层框架。 引用官网的一句话 我们深知企业级应用在追求规范和共建的同时,还需要考虑如何平衡不同团队之间的差异,求同存异。所以我们没有选择社区常见框架的大集市模式(集成如数据库、模板引擎、前端框架等功能),而是专注于提供 Web 开发的核心功能和一套灵活可扩展的插件机制。「——官网」 定制目标在开始定制业务框架前,我们先设定一下需要定制的目标。 扩展Controller,添加API成功/失败返回结果函数; 设置默认模板引擎为 pug; 扩展ctx,添加util, 将dayjs作为统一日期处理库; 编码如果对Egg.js不太熟悉,建议可以先学习下Egg.js的基本使用。 框架初始化通过以下命令,初始化项目。其中 --type=framework 表示框架骨架 villa-framework为框架名和项目文件夹名 $ npm init egg --type=framework villa-framework 以下是初始化出来的目录 villa-framework ├── app │ ├── extend │ └── service ├── config │ ├── config.default.js │ └── plugin.js ├── lib │ └── framework.js ├── test │ ├── fixtures │ └── framework.test.js ├── README.md ├── index.js └── package.json 其中app、config目录基本跟正常的Egg.js应用无差异,但增加了framework.js文件,对应用进行扩展。 // lib/framework.js 'use strict';
const path = require('path'); const egg = require('egg'); const EGG_PATH = Symbol.for('egg#eggPath');
class Application extends egg.Application { get [EGG_PATH]() { return path.dirname(__dirname); } }
class Agent extends egg.Agent { get [EGG_PATH]() { return path.dirname(__dirname); } }
module.exports = Object.assign(egg, { Application, Agent, }); 扩展Controller,添加成功失败返回结果处理函数// 以下是Egg.js Controller使用的代码 const Controller = require('egg').Controller;
// 未来修改为 const Controller = require('villa-framework').Controller; 由上面源码我们知道,Controller来自egg对象,因此我们只需要替换为我们定义的Controller即可。 (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |