理解 egg.js

egg.js 是国内最热门的 node.js 框架之一,不同于 exporess、koa 等基础框架,egg.js 在应用级的提炼封装,使其更贴近业务场景,更快上手。

入门和理解 egg.js 的设计理念,有助于提升我们在面对大型 node.js 应用时的设计思路。

在本文中,我们从 egg.js 文档出发,你将看到:

  • egg 设计了什么样的应用架构?为什么这么架构?有哪些大型 node 应用可参考的点?
  • node 应用要面临哪些常见问题?egg 针对这些问题提供了什么解决方案?

第一部分 整体应用架构思想

这部分从整体应用架构出发,分析 egg 改造 Koa 的意义,以及 MVC 思想是如何落地到 egg 的约定中的。

从 Koa 到 egg

koa 是 egg 的基础。 egg 在 koa 的基础上做了一层扩展和标准化,那么这里有两个问题要讨论

为什么是 Koa?

市面上不缺乏 node 基础框架,以 Express、Koa 最具影响力,那么相比 Express,Koa 有哪些特点让受到 Egg 青睐呢?

首先,众所周知,二者在::中间件机制::上有差异。

(其实 Express 也可以当洋葱圈用,但 next 异步问题又让大家被迫用成了尾调用)

简单说,Koa 的中间件机制对「异步」和「扩展」都要友好的多。

再者,相对于 Express 的 Request 和 Response 两个对象,Koa 提供了更集合的 ::Context 对象::

这样,App、Context 这两个重要的类,可以分工覆蓋所有的挂载场景:

  • App:代表整个应用,通常携带应用级别的配置、环境
  • Context:代表一次请求,通常携带请求和返回的对象,以及各种中间件对请求的处理结果和扩展

Egg 对 Koa 的扩展

koa 的 app、context 方便挂载扩展,因此 egg.js 在扩展上大做文章,提供了丰富的扩展方式。

::直接扩展:: application,context,request,response

正常你自己写 koa 是要写入口的,但 egg 把实例化 koa 的代码封装起来,所以本来应该在 index 中做的对 App 的扩展就不能实现了,需要一个配置的地方解决这个问题,顺手加上 context、req、res 的扩展。

这只是最简单的扩展方式。适合扩展一些简单的功能,比如在 Context 上挂个 ua 判断方法

// app/extend/context.js
module.exports = {
get isIOS() {
const iosReg = /iphone|ipad|ipod/i;
return iosReg.test(this.get('user-agent'));
},
};

<< · Back Index ·>>

发表回复

相关推荐

RSocket 基于消息传递的反应式应用层网络协议

首先根据RSocket官网的副标题,RSocket的一句话定义是:

· 1分钟前

女性創業平臺|人生中的第一百萬,你可以來九薈集團賺!

如果你還沒有賺到,你人生中真正意義上的第一桶金,那就抓緊準備瞭,2023年開始 一點都不晚!九薈集團將在疫情解放後的2023年...

· 1分钟前

405错误解决方法,哪种405解决方法更方便?

今天小编主要来和大家探讨一下405错误解决方法,哪种405解决方法更方便?相信大家都应该遇到过405错误吧?下面详细的说说其 ...

· 2分钟前

关于幸福的经典语录

1、幸福是什么?我觉得幸福其实是一种心情、一种滋味、更是一种满足。只要你细心地发现和用心地体会,你就会成为最幸福的人。

· 2分钟前

热烈欢迎洛阳偃师人社局参观工打打直聘网职业技能培训基地

8月21日,洛阳偃师副区长郑区长、人社局局长王局长和赵局长,就业服务中心李主任等领导一行莅临参观河南工打打直聘网职业技 ...

· 2分钟前