在egg的官方文档上可以看到:
Egg.js 为企业级框架和应用而生,我们希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。
那么到底什么是egg呢?
egg设计理念
首先egg也是一款基于node的server web框架,但这个框架不同于koa2, express。
1,egg不定制技术选型,专注于提供 Web 开发的核心功能和一套灵活可扩展的插件机制
2,一个插件只做一件事
比如 Nunjucks 模板封装成了 egg-view-nunjucks、MySQL 数据库封装成了 egg-mysql
3,约定优于配置
按照一套统一的约定进行应用开发,团队内部采用这种方式可以减少开发人员的学习成本
和express,koa, sails 框架的区别
Express 是 Node.js 社区广泛使用的框架,简单且扩展性强,非常适合做个人项目。
但框架本身缺少约定,标准的 MVC 模型会有各种千奇百怪的写法
egg基于koa
sails和egg一样,奉行约定优于配置,可扩展性也很高,但是egg封装集成度没有sails高,sails集成了一些egg没有封装在框架内的插件。
总的来说:
egg有以下特性:
提供基于 Egg 定制上层框架的能力
高度可扩展的插件机制
内置多进程管理
基于 Koa 开发,性能优异
框架稳定,测试覆盖率高
渐进式开发
egg底层架构实现模式:
egg继承了koa框架;
关于kao的设计模式,这里简单提及:
支持async function(){}
中间件选择洋葱圈模型
context上继承response和request,贯穿整个请求
egg基于koa的扩展:
1,通过定义 app/extend/{application,context,request,response}.js
来扩展 Koa 中对应的四个对象的原型
2,koa中是引入插件来做一些功能,比如koa-session koa-bodyparse
egg针对这个功能提供插件机制:
一个插件可以包含
- extend:扩展基础对象的上下文,提供各种工具类、属性。
- middleware:增加一个或多个中间件,提供请求的前置、后置处理逻辑。
- config:配置各个环境下插件自身的默认配置项。
参考: https://eggjs.org/zh-cn/intro/egg-and-koa.html