课程名称: Node.js工程师养成计划
课程章节:Egg框架重构篇 - Egg.js 快速入门
课程讲师: 北瑶
课程内容:
Egg 是什么?
Egg.js 为企业级框架和应用而生,我们希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。
异步编程模型
Node.js 是一个异步的世界, 官方 API 支持的都是 Callback 形式的异步编程, 这带来了诸多问题:
- callback hell: 最臭名昭著的 callback 嵌套问题。
- release zalgo: 异步函数中可能同步调用 callback 返回数据,带来不一致性。
安装
npm init egg --type=simple
npm install
框架内置基础对象
在本章,我们会初步介绍一下框架中内置的一些基础对象,包括从 Koa 继承而来的 4 个对象(Application, Context, Request, Response) 以及框架扩展的一些对象(Controller, Service, Helper, Config, Logger),在后续的文档阅读中我们会经常遇到它们。
Application
Application 是全局应用对象,在一个应用中,只会实例化一个,它继承自 Koa.Application,在它上面我们可以挂载一些全局的方法和对象。我们可以轻松的在插件或者应用中扩展 Application 对象。
事件
在框架运行时, 会把 Application 实例上触发一些事件, 应用开发者或者在插件开发者可以监听这些事件做一些操作, 作为应用开发者, 我们一般会在启动自定义脚本中进行监听
- server: 该事件一个 worker 进程只会触发一次,在 HTTP 服务完成启动后,会将 HTTP server 通过这个事件暴露出来给开发者
- error: 运行时有任何的异常被 onerror 插件捕获后,都会触发 error 事件,将错误对象和关联的上下文(如果有)暴露给开发者,可以进行自定义的日志记录上报等处理。
- request 和 response: 应用收到请求和响应请求时,分别会触发 request 和 response 事件,并将当前请求上下文暴露出来,开发者可以监听这两个事件来进行日志记录。
// app.js
module.exports = (app) => {
app.once('server', (server) => {
// websocket
});
app.on('error', (err, ctx) => {
// report error
});
app.on('request', (ctx) => {
// log receive request
});
app.on('response', (ctx) => {
// ctx.starttime is set by framework
const used = Date.now() - ctx.starttime;
// log total cost
});
};
学习心得
通过这章学习, 了解 egg 框架在基于 koa中的简便