美文网首页
Egg.js框架学习

Egg.js框架学习

作者: 四月天__ | 来源:发表于2017-09-22 13:50 被阅读674次

框架内置基础对象

  • Application

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

获取方式

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

  • ctx.app
  • ControllerMiddlewareHelperService中都可以通过 this.app 访问到 Application对象,例如 this.app.config访问配置对象。
  • 在 app.js 中 app 对象会作为第一个参数注入到入口函数中
// app.js   app.js 泛指Egg框架内的的js文件!!!
module.exports = app => {
  // 使用 app 对象
};
  • Controller

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

  • ctx 当前请求的 Context 实例。

  • app 应用的 Application 实例。

  • config 应用的配置

  • service 应用所有的 service

  • logger 为当前 controller 封装的 logger 对象。

在 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
};
  • 自定义 Controller 基类
    我们可以通过在app.js里面为Controller添加一些常用的方法(比如在请求成功或失败的时候给客户端返回数据时的固定格式等)来提高我们的开发效率:
// 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 对象,这个对象封装了这次用户请求的信息,并提供了许多便捷的方法来获取请求参数或者设置响应信息。

获取方式

最常见的 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 & Response

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 都继承于该基类实现。
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
};

相关文章

  • (一)egg.js快速人门,跑出hello world

    一:什么是egg.js? egg.js是nodejs 的一个框架,是基于koa框架的基础上整合的一套上层框架,既定...

  • Egg.js框架学习

    框架内置基础对象 Application Application(简写为app) 是全局应用对象,在一个应用中,只...

  • Egg.js 教程

    一、Egg 简介 Egg.js 为企业级框架和应用而生,我们希望由 Egg.js 孕育出更多上层框架,帮助开发团队...

  • egg.js入门示例

    egg入门示例 1、egg.js简介 egg.js是阿里巴巴开源的基于node.js封装的框架,为企业级框架和应用...

  • egg-mongoose 增删改查

    egg 基本框架的搭建 egg.js官网 一、egg.js 添加 egg-mongoose 插件 1. 在plug...

  • 1. egg 介绍

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

  • 基于 Egg.js 构建 OAuth 2.0 服务器

    技术栈:Egg.js、MongoDB、EJS Egg.js 作为后台服务端框架; MongoDB 作为后台服务器的...

  • Egg框架应用Sequelize操作MySQL小结

    Egg.js,是阿里开源的企业级 Node.js 框架。相比Express、Koa,Egg.js更为轻量,是Koa...

  • nodejs框架对比:koa和express

    目前比较流行的nodejs框架有express、koa、egg.js,还有就是和ts相关的框架nest.js。 无...

  • Express Koa2 Egg 对比

    目前比较流行的nodejs框架有express、koa、egg.js,还有就是和ts相关的框架nest.js。 无...

网友评论

      本文标题:Egg.js框架学习

      本文链接:https://www.haomeiwen.com/subject/qeoxextx.html