Egg.js框架学习

2017-09-22  本文已影响674人  四月天__

框架内置基础对象

Application(简写为app) 是全局应用对象,在一个应用中,只会实例化一个,在应用启动时被创建,在它上面我们可以挂载一些全局的方法和对象

获取方式

Application 对象几乎可以在编写应用时的任何一个地方获取到,几乎所有被框架 Loader 加载的文件(Controller,Service,Schedule 等),都可以 export 一个函数,这个函数会被 Loader 调用,并使用 app 作为参数

// app.js   app.js 泛指Egg框架内的的js文件!!!
module.exports = app => {
  // 使用 app 对象
};

框架提供了一个 Controller 基类,并推荐所有的 Controller 都继承于该基类实现。这个 Controller 基类有下列属性:

在 Controller 文件中,可以通过两种方式来引用 Controller 基类:

// app/controller/user.js

// 从 app 实例上获取(推荐)
module.exports = app => {
   return class UserController extends app.Controller {
   // implement
};
};

// 从 egg 上获取
const egg = require('egg');
module.exports = class UserController extends egg.Controller {
   // implement
};
// app.js
module.exports = app => {
  class CustomController extends app.Controller {
    get user() {
      return this.ctx.session.user;
    }
    success(data) {
      this.ctx.body = {
        success: true,
        data,
      };
    }
    notFound(msg) {
      msg = msg || 'not found';
      this.ctx.throw(404, msg);
    }
  }
  app.Controller = CustomController;
}

这样的方法在任何一个扩展自Controller的类都可以调用。方便、快捷。

//  app/controller/search.js
module.exports = app => {
  class SearchController extends app.Controller {
    * index() {
      // this.ctx.body = `search: ${this.ctx.query.name}`;

      // 调用基类来返回成功或者失败的数据
      const res = {
        name: '四月天',
        nickName: '老程',
        age: 26,
      };
      this.success(res);
    }
  }
  return SearchController;
};

Context 是一个请求级别的对象,在每一次收到用户请求时,框架会实例化一个 Context 对象,这个对象封装了这次用户请求的信息,并提供了许多便捷的方法来获取请求参数或者设置响应信息。

获取方式

最常见的 Context 实例获取方式是在 Middleware, Controller 以及 Service 中。

1.controller中获取

// app/controller/home.js

module.exports = app => {
  class HomeController extends app.Controller {
    * index() {
      this.ctx.body = 'hi, egg,6666啊!!';
    }
  }
  return HomeController;
};

Request 是一个请求级别的对象,继承自 Koa.Request。封装了 Node.js 原生的 HTTP Request 对象,提供了一系列辅助方法获取 HTTP 请求常用参数。

Response 是一个请求级别的对象,继承自 Koa.Response。封装了 Node.js 原生的 HTTP Response 对象,提供了一系列辅助方法设置 HTTP 响应。

可以在 Context的实例上获取到当前请求的 Request(ctx.request) 和 Response(ctx.response) 实例。
查看具体怎样来获取HTTP请求的参数 ;

框架提供了一个 Service 基类,并推荐所有的 Service 都继承于该基类实现。
Service 基类的属性和 Controller 基类属性一致,访问方式也类似:

// app/service/user.js

// 从 app 实例上获取(推荐)
module.exports = app => {
    return class UserService extends app.Service {
    // implement
};
};

// 从 egg 上获取
const egg = require('egg');
module.exports = class UserService extends egg.Service {
    // implement
};
上一篇 下一篇

猜你喜欢

热点阅读