加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 综合聚焦 > 编程要点 > 资讯 > 正文

业务框架封装及处理方式

发布时间:2021-05-22 11:29:36 所属栏目:资讯 来源:互联网
导读:为了选择合适的底层框架,小编整理了awesome-nodejs的仓库(每个分类按github star数排序),从Web框架部分可以看到非常丰富,那么我们如何选择。 awesome-nodejs地址: https://github.com/huaize2020/awesome-nodejs/blob/main/README-zh-CN.md 主流的Web框

为了选择合适的底层框架,小编整理了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即可。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读