zoukankan      html  css  js  c++  java
  • egg内置对象

    http://eggjs.org/zh-cn/basics/objects.html

    egg内置对象

    框架内置基础对象:从 Koa 继承而来的 4 个对象(Application, Context, Request, Response) 以及框架扩展的一些对象(Controller, Service, Helper, Config, Logger

    1.1 Application

    Application 是全局应用对象,在一个应用中,只会实例化一个,它继承自 Koa.Application,在它上面我们可以挂载一些全局的方法和对象。我们可以轻松的在插件或者应用中扩展 Application 对象。

    几乎所有被框架 Loader 加载的文件(Controller,Service,Schedule 等),都可以 export 一个函数,这个函数会被 Loader 调用,并使用 app 作为参数:

    1. 在启动脚本中获取
    // app.js 
    module.exports = app => {
      app.cache = new Cache();
    };
    
    1. 在controller中获取
    class UserController extends Controller {
      async fetch() {
        // this.app
        this.ctx.body = this.app.cache.get(this.ctx.query.id);
        // this.ctx.app  也可以通过ctx对象获取
        this.ctx.body = this.ctx.app.cache.get(this.ctx.query.id);
      }
    }
    
    1. 在service中使用
    class UserService extends Service {
      async fetch() {
        this.app; // 得到Appication对象
      }
    }
    

    1.2 Context

    Context 是一个请求级别的对象,继承自 Koa.Context。在每一次收到用户请求时,框架会实例化一个 Context 对象,这个对象封装了这次用户请求的信息,并提供了许多便捷的方法来获取请求参数或者设置响应信息。框架会将所有的 Service 挂载到 Context 实例上,一些插件也会将一些其他的方法和对象挂载到它上面(egg-sequelize 会将所有的 model 挂载在 Context 上)。

    1. 中间件中使用
    async function middleware(ctx, next) {
      ctx; // ctx is the instance of Context
    }
    
    1. service和controller中使用
    this.ctx; // 得到Context实例
    

    1.3 Request and Response

    都是请求级别的对象,提供了一系列辅助方法获取Http请求与设置Http响应。

    通过Context对象获取

    ctx.request; // Request instance
    ctx.response; // Response instance
    

    1.4 Helper(扩展)

    Helper 用来提供一些实用的 utility 函数。它的作用在于我们可以将一些常用的动作抽离在 helper.js 里面成为一个独立的函数,这样可以用 JavaScript 来写复杂的逻辑,避免逻辑分散各处,同时可以更好的编写测试用例。

    通过Context对象获取

    ctx.helper; // Helper instance
    

    在模板中使用

    {{ helper.shtml(value) }}
    

    编写helper:

    helper统一放在 app/extend
    五种扩展方式:Application, Context, Request, Response, Helper

    1. Application
      框架会把 app/extend/application.js 中定义的对象与 Koa Application 的 prototype 对象进行合并,在应用启动时会基于扩展后的 prototype 生成 app 对象
      通过框架扩展的形式自定义helper方法
    // app/extend/application.js
    module.exports = {
      foo(param) {
        // this 就是 app 对象,在其中可以调用 app 上的其他方法,或访问属性
      },
    };
    // 使用: app.foo
    
    1. Context
    // app/extend/context.js
    module.exports = {
      foo(param) {
        // this 就是 ctx 对象,在其中可以调用 ctx 上的其他方法,或访问属性
      },
    };
    // 使用:ctx.foo
    
    1. Request
    // app/extend/request.js
    module.exports = {
      get foo() {
        return this.get('x-request-foo');
      },
    };
    // 使用: ctx.request.foo
    
    1. Response
    // app/extend/response.js
    module.exports = {
      set foo(value) {
        this.set('x-response-foo', value);
      },
    };
    // 使用: ctx.response.foo
    
    1. Helper
    // app/extend/helper.js
    module.exports = {
      foo(param) {
        // this 是 helper 对象,在其中可以调用其他 helper 方法
        // this.ctx => context 对象
        // this.app => application 对象
      },
    };
    // 使用: ctx.hepler.foo
    

    1.5 Config

    通过Application对象获取

    app.config; // Config instance
    

    1.6 Logger

    分为Application Logger, Context Logger, Controller Logger, Service Logger等,有不同的获取方式

    let logger = app.logger; // App Logger
    // Context Logger 打印的日志都会在前面带上一些当前请求相关的信息(如 [$userId/$ip/$traceId/${cost}ms $method $url])
    logger = ctx.logger; // Context Logger
    // Service Logger, Controller Logger本质上就是Context Logger, 不过在打印的时候会额外加上文件路径
    logger = this.logger; // 在service或controller中直接获取
    // logger 方法
    logger.debug();
    logger.info();
    logger.warn();
    logger.error();
    
  • 相关阅读:
    【UWP】仅在TextBlock文本溢出时显示Tooltip
    Vue CSS引用背景图片问题
    使用C#与CefSharp相互调用所踩过的坑
    使用JS在网页上查看显示PDF文件
    VS 代码提示默认不选中 解决办法
    Windows Server 2012 R2更新(KB2919355)
    在ASP.NET Core 3.1中使用Swagger
    SQL SERVER 数据库授权指定用户
    第一篇博客
    观察者模式
  • 原文地址:https://www.cnblogs.com/elimsc/p/15046693.html
Copyright © 2011-2022 走看看