一、Egg 简介
Egg.js 为企业级框架和应用而生,我们希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。
(感谢阿里!)
如何评价阿里开源的企业级 Node.js 框架 EggJS?
二、Egg 初体验
我们推荐直接使用脚手架,只需几条简单指令,即可快速生成项目:
$ mkdir egg-example && cd egg-example
$ npm init egg --type=simple
$ npm i
启动项目:
$ npm run dev
$ open localhost:7001
如果下载失败,从这里克隆项目到本地
三、Egg VS Express/Koa
3.1 从 Express 到 Koa
Koa 默认选择了
async function
作为异步编程模型-
Koa 的中间件和 Express 不同,Koa 选择了洋葱圈模型。所有的请求经过一个中间件的时候都会执行两次,对比 Express 形式的中间件,Koa 的模型可以非常方便的实现后置处理逻辑
和 Express 只有 Request 和 Response 两个对象不同,Koa 增加了一个 Context 的对象,作为这次请求的上下文对象。我们可以将一次请求相关的上下文都挂载到这个对象上。相较于 request 和 response 而言更加符合语义。
同时 Context 上也挂载了 Request 和 Response 两个对象。和 Express 类似,这两个对象都提供了大量的便捷方法辅助开发,例如:
get request.query
get request.hostname
set response.body
set response.status
3.2 从 Koa 到 Egg
Koa 是一个非常优秀的框架,然而对于企业级应用来说,它还比较基础。而 Egg 选择了 Koa 作为其基础框架,在它的模型基础上,进一步对它进行了一些增强。
3.3 项目实例对比
- 安装 Mysql
mysql -u root -p // 输入安装结束时设置的密码,如111111
- 建立数据表
create database test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
use test;
create table todoList(
id int auto_increment primary key,
title char(30) not null
);
四、Egg 优势
1. 设计原则
Egg 奉行『约定优于配置』,按照一套统一的约定进行应用开发,团队内部采用这种方式可以减少开发人员的学习成本,开发人员不再是『钉子』,可以流动起来。没有约定的团队,沟通成本是非常高的,比如有人会按目录分栈而其他人按目录分功能,开发者认知不一致很容易犯错。但约定不等于扩展性差,相反 Egg 有很高的扩展性,可以按照团队的约定定制框架。使用 Loader 可以让框架根据不同环境定义默认配置,还可以覆盖 Egg 的默认约定。
2. 特性
3. 渐进式开发(参考)
4. 应用、插件和框架
从上面的使用场景可以看到应用、插件和框架三者之间的关系。
我们在应用中完成业务,需要指定一个框架才能运行起来,当需要某个特性场景的功能时可以配置插件(比如 MySQL)。
插件只完成特定功能,当两个独立的功能有互相依赖时,还是分开两个插件,但需要配置依赖。
框架是一个启动器(默认就是 Egg),必须有它才能运行起来。框架还是一个封装器,将插件的功能聚合起来统一提供,框架也可以配置插件。
在框架的基础上还可以扩展出新的框架,也就是说框架是可以无限级继承的,有点像类的继承。
五、插件、框架开发实战(待定)
To be continue...