2
Controller

yutent edited this page 2023-11-02 12:08:09 +08:00

控制器基类

框架内置有一个控制器基类, 提供了session/jwt/view的进一步封装, 简化调用。

2.0版之后, 这个基类为 非必须 的。

使用示例:

import Controller from '@gm5/controller'


// 1.x版时 所有的应用, 都要继承Controller
// 以获取跟框架交互的能力
export default class extends Controller  {
  
  // 这个main方法是可选的, 如果有定义, 会自动先被调用
  // 可以在这里做任何需要预处理的事, 支持async/await
  __main__() {
    // todo...
  }

  async indexAction() {
    this.response.end('Hello world!')
    
    // 2.0版之后调整为body属性
    this.response.body = 'Hello world!'
  }

  async otherAction() {
    // todo...
  }
}

属性

.name

当前控制器(一级路由)的名字。

.context

上下文对象, 即为 createApp()的app对象。

let regexp = this.context.get('regexp') // 读取内置的常用的正则

console.log(this.context.$$xxx) // 假设之前安装了一个叫 xxx 的拓展包

.request

框架的Request对象实例。

客户端请求里的所有的信息, 都能从这个对象中读取, 具体请查看Request

.response

框架的Response对象实例。

所有将要发送给客户端的操作, 都是通过该对象实现, 具体请查看Response

.method

当前请求的类型, 如 GET/POST/PUT等。

v2.0版新增

.host

当前请求所使用的域名(含端口号,如不是80和443时)。

v2.0版新增

.hostname

当前请求所使用的域名(不含端口号)。

v2.0版新增

.ua

当前请求的客户端的user-agent.

v2.0版新增

.jwt

该属性仅在安装并使用@gm5/jwt模块时可用。该属性为一个对象 {result: <Any>, sign: <Function>, verify: <Function>}

v2.0版新增


方法

.assign(key<String>, val<Any>)

模板引擎的变量注册方法.

功能同php smarty的assign()。注册后的变量, 可以在模板中使用。

仅在安装@gm5/views模块时可用。

.render(filePath<String>, noParse<Boolean>)

模板渲染方法, 需要在配置中开启模板引擎开关。

传入要渲染的模板的相对路径(相对于初始化时配置的模板目录); 第2个方法是"是否不解析模板", 默认为false。 对于需要渲染模板, 但又不需要填充数据的页面, 可以传入true, 提高性能。

仅在安装@gm5/views模块时可用。

.jwt(data<Object>)

json web token的操作, 需要在配置中开启jwt。 如果有传参, 则是对参数进行签名, 返回签名后的token, 这个token可直接传给客户端。

如果不传参, 则是校验客户端发送上来的token, 如果校验成功, 则可以得到之前签名的数据, 如果返回false, 则表示校验失败。如果返回undefined, 则为没有要校验的token。 校验的操作, 建议放在 __main__() 方法中执行, 避免多次调用导致重复校验, 浪费性能。

仅在安装@gm5/jwt模块时可用。

v2.0版时, 废弃, 改为.jwt属性。

cookie的读写操作。

只传key为读取, 传val为写入, opt字段, 提供一些额外的配置, 如有效期, 域等。 跟jq的cookie()方法使用一致。这里不再重复说明。

.session(key<String>, val<String>)

session的读写操作。

只传key为读取, 传val为写入。

要注意的是, 读取返回的是一个Promise对象。写入不返回值。

仅在安装@gm5/session模块时可用。

.xdebug(err<String>)

输出调试信息。 往响应头中写入x-debug字段, 输出一些debug的信息, 支持多次调用, 会追加输出。

v2.0版中已废弃。