一、背景
在慕课网架构师的学习中,脚手架的模版安装,数据是由egg.js + mongodb搭建的管理系统获得的数据,因此,这里抽出一节,对egg.js开发快速入门,进行一个简单的学习。
Egg.js 为企业级框架和应用而生.
Egg.js 与 Koa
异步编程模型
callback回调带来的嵌套问题,臭名昭彰,Promise脱颖而出,内置到ES2015,同时 async function这个官方的解决方案也于ES2017发布,并在Node.js8中实现
Koa
由express原班人马打造,就像我不熟悉koa一样,不熟悉express。 koa和express的不同点处理koa默认支持的异步编程,还有:
- Koa和Express的中间件不同,对比Express形式的中间件,Koa模型可以非常方便的实现后置处理逻辑
- 与Express不对,除了Request和Response两个对象外,Koa还增加了一个Context对象。
异常处理:通过同步代码编写异步代码的一大乐趣就是对错误的捕获:舒适、自然。
Egg继承于Koa,且增强
- 扩展:可以通过定义 app/extend/{application,context,request,response}.js 来扩展 Koa 中对应的四个对象的原型
- 插件:Egg 提供了一个更加强大的插件机制,让这些独立领域的功能模块可以更加容易编写。
二、快速入门
使用脚手架快速初始化 $ mkdir egg-example && cd egg-example $ npm init egg —type=simple $ npm i
启动项目 $ npm run dev $ open http://localhost:7001
三、基础功能
1. 目录结构
由框架约定的目录
- app/router.js:用于配置url路由规则
- app/controller/**:用于解析用户的输入,处理后返回相应的结果
- app/service/**:用于编写业务逻辑层。
2. 内置对象
egg.js框架中内置了一些基础对象,包括从Koa继承来的Application\Context\Request\Response,以及框架扩展的Controller、Service、Helper、Config、Logger。
2.1 Application
2.2 Context
2.3 Request & Response
需要注意,获取POST的body应该使用ctx.response.body,而不是ctx.body
2.4 Controller
这个Controller基类有下列属性
- ctx:当前请求的Context实例
- app:应用的Application实例
- config:应用的配置
- service:应用所有的service
- logger:为当前Controller封装的logger对象。
2.5 Service
2.6 Helper
2.7 Config
2.8 Logger
3. 运行环境
- 框架提供了变量 app.config.env来表示当前的运行环境。
4. 配置
5. 中间件
TIPS: egg.js是基于Koa开发的,因此在我学习了一些egg.js文档后,发现如果不会Koa直接学习egg,总感觉不大对劲,因此暂缓egg的学习。