一、背景


在慕课网架构师的学习中,脚手架的模版安装,数据是由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的学习。