EggJs学习 (一)

一、什么是Egg.js

    Egg.js是阿里开源的node.js框架,国内使用较为普及。

    Egg.js基于Koajs,为企业级框架和应用而生,我们希望由Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。

 

二、异步编程模型

    Node.js是一个一步的世界,社区提供了各种异步解决方案,最终胜出的是 Promise,他也被内置到了 ECMAScript2015(ES6) 中,Promise 实际上是利用编程技巧将回调函数改成链式调用,避免了回调地狱,但是 Promise 存在着代码冗余的问题,不管什么操作,放眼一看全都是 then

    在 Promise 的基础上,结合 Generator 提供的切换上下文能力,官方提供了async await这种解决方案,并在 ECMAScript2017 中发布,Node.js 8 中实现。

    asyncawait 可以让我们用同步写法编写异步代码。async 关键字声明函数,使用 await 关键字来等待一个 Promiseresolve 或者 reject

    async function 的返回值是一个 Promise pending状态,这个 Promise 要么会通过一个由 async 函数返回的值被解决,要么会通过一个从 async函数中抛出的异常被拒绝。

 

二、Egg.js 特点

    它继承了Koajs的高性能优点,同时又加入了一些约束与开发规范,来规避Koajs框架本身的开发自由度太高的问题。

    1、扩展

     Egg 的框架或者应用中,我们可以定义 app/extend/[application || context || request || response].js 四个文件来扩展 Koa 中的四个对象的原型。通过这个功能我们可以快速地增加更多的辅助功能。

    * application 对象:该对象是 Koa 的核心对象,通过该对象来初始化并创建 WebServer

    * context 对象:Koa 的 Context 把 node 的 request, response 对象封装进一个单独对象, 并提供许多开发 web 应用和 APIs 有用的方法.

    * request 对象:Koa Request 对象是对 noderequest 进一步抽象和封装,提供了日常 HTTP 服务器开发中一些有用的功能。其中有常用的API,比如:header、method、url、originalUrl、host、query等等。

    * response 对象:Koa Response 对象是对 noderesponse 进一步抽象和封装,提供了日常HTTP服务器开发中一些有用的功能。API比如:hearder、status、body、redurec等等。

    2、插件

    Koa 中,经常会引用许许多多的中间件来提供各种各样的红能,譬如 koa-session 提供 Session 的支持,koa-bodyparser 来解析请求body。

    Koa的中间件是洋葱模型,也就是说所有的请求经过一个中间件的时候都会被执行两次。

    Egg 提供了一个更加强大的插件机制,让这些独立领域的功能模块可以更加容易编写。

 

一个插件可以包含

 

  • extend:扩展基础对象的上下文,提供各种工具类、属性。
  • middleware:增加一个或多个中间件,提供请求的前置、后置处理逻辑。
  • config:配置各个环境下插件自身的默认配置项。

 

一个独立领域下的插件实现,可以在代码维护性非常高的情况下实现非常完善的功能,而插件也支持配置各个环境下的默认(最佳)配置,让我们使用插件的时候几乎可以不需要修改配置项。

 

三、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

 

未完~

 

posted @ 2021-05-09 18:37  console.log('宇航')  阅读(494)  评论(0编辑  收藏  举报