Egg.js 教程

一、Egg 简介

Egg.js 为企业级框架和应用而生,我们希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。
(感谢阿里!)
如何评价阿里开源的企业级 Node.js 框架 EggJS?

image.png
image.png
image.png

二、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 的模型可以非常方便的实现后置处理逻辑


    image.png
  • 和 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
);
  • 前端项目:

    • Todo-list-fe
  • 后端项目:

    • NodeTemplateExpress

    • NodeTemplateKoa

    • NodeTemplateEgg

四、Egg 优势

1. 设计原则

Egg 奉行『约定优于配置』,按照一套统一的约定进行应用开发,团队内部采用这种方式可以减少开发人员的学习成本,开发人员不再是『钉子』,可以流动起来。没有约定的团队,沟通成本是非常高的,比如有人会按目录分栈而其他人按目录分功能,开发者认知不一致很容易犯错。但约定不等于扩展性差,相反 Egg 有很高的扩展性,可以按照团队的约定定制框架。使用 Loader 可以让框架根据不同环境定义默认配置,还可以覆盖 Egg 的默认约定。

2. 特性

  • 提供基于 Egg 定制上层框架的能力
  • 高度可扩展的插件机制
  • 内置多进程管理
  • 基于 Koa 开发,性能优异
  • 框架稳定,测试覆盖率高
  • 渐进式开发

3. 渐进式开发(参考)

eggjs/examples/progressive

4. 应用、插件和框架

从上面的使用场景可以看到应用、插件和框架三者之间的关系。

  • 我们在应用中完成业务,需要指定一个框架才能运行起来,当需要某个特性场景的功能时可以配置插件(比如 MySQL)。

  • 插件只完成特定功能,当两个独立的功能有互相依赖时,还是分开两个插件,但需要配置依赖。

  • 框架是一个启动器(默认就是 Egg),必须有它才能运行起来。框架还是一个封装器,将插件的功能聚合起来统一提供,框架也可以配置插件。
    在框架的基础上还可以扩展出新的框架,也就是说框架是可以无限级继承的,有点像类的继承。

image.png

五、插件、框架开发实战(待定)

To be continue...

你可能感兴趣的:(Egg.js 教程)