Koa
Koa是一个新的web框架,由Express幕后的原班人马打造,致力于成为web应用和API开发领域中的一个更小、更富有表现力、更健壮的基石。
Koa相对于Express有几个显著的特点。
- Koa中间件选择了洋葱模型。
- Koa除了Express的Request和Response两个对象外,增加了Context对象。
- 将捕获异常中间件放在其他中间件之间,就可以捕获到它们的异常了。
中间件洋葱模型
中间件执行顺序:
每个中间件就像是洋葱的一层,所有的请求经过一个中间件都会执行两次,这样可以非常方便的后置处理逻辑。
Egg.js
Egg.js为企业级框架和应用而生,我们希望由Egg孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。
Egg不直接提供功能,只是集成各种功能插件。简单来说,就一个词,那就是轻量化。
Egg是基于Koa开发的,选择其作为基础框架,在它的模型基础上,进行了一些增强。
- 扩展
在基于Egg的框架或者应用中,我们可以定义app/extend/{application, context, request, response}.js
来扩展Koa中对应的四个对象的原型,这样我们就可以快速的增加更多的辅助方法。
- 插件
一个插件可以包含extend
,middleware
,config
。extend
扩展基础对象的上下文,提供各种工具类、属性。mdidleware
增加一个或多个中间件,提供请求的前置、后置处理逻辑。config
配置各个环境下插件自身的默认配置项。
第一个项目
使用脚手架可以快速生成项目。
npm init egg --type=simple
egg项目文件结构规范。
egg-project
├── package.json
├── app.js (可选)
├── agent.js (可选)
├── app
| ├── router.js
│ ├── controller
│ | └── home.js
│ ├── service (可选)
│ | └── user.js
│ ├── middleware (可选)
│ | └── response_time.js
│ ├── schedule (可选)
│ | └── my_task.js
│ ├── public (可选)
│ | └── reset.css
│ ├── view (可选)
│ | └── home.tpl
│ └── extend (可选)
│ ├── helper.js (可选)
│ ├── request.js (可选)
│ ├── response.js (可选)
│ ├── context.js (可选)
│ ├── application.js (可选)
│ └── agent.js (可选)
├── config
| ├── plugin.js
| ├── config.default.js
│ ├── config.prod.js
| ├── config.test.js (可选)
| ├── config.local.js (可选)
| └── config.unittest.js (可选)
└── test
├── middleware
| └── response_time.test.js
└── controller
└── home.test.js
app/router.js
,用于配置URL路由规则。