zoukankan      html  css  js  c++  java
  • 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
    

    未完~

  • 相关阅读:
    Leetcode第七题——数的反转
    Leetcode第六题——横向遍历ZIGZAG数组
    26 将查询结果插入到一张表中?
    25 表的复制
    24 insert 语句插入数据
    23 创建表
    22 limit(重点中的重点,以后分页查询全靠它了。)
    21 union(可以将查询结果集相加
    20 子查询
    19 连接查询
  • 原文地址:https://www.cnblogs.com/Lyh1997/p/14748497.html
Copyright © 2011-2022 走看看