添加 Controller

master
yutent 2023-08-30 14:52:36 +08:00
parent d5d00ba709
commit aa3b7379af
1 changed files with 90 additions and 0 deletions

90
Controller.md Normal file

@ -0,0 +1,90 @@
## 控制器基类
> 框架内置有一个控制器基类。所有的业务应用入口文件, 都必须继承这个基类, 以获取跟框架实例通讯的能力。
如脚手架默认的index.js里,
```js
import Controller from '@gm5/controller'
// 所有的应用, 都要继承Controller
// 以获取跟框架交互的能力
export default class Index extends Controller {
// 这个main方法是可选的, 如果有定义, 会自动先被调用
// 可以在这里做任何需要预处理的事, 支持async/await
__main__() {
// todo...
}
async indexAction() {
this.response.end('Hello world!')
}
async otherAction() {
this.response.end('Hello other!')
}
}
```
继承基类, 除了能获得跟框架通讯的能力之外, 还有一些常用的额外的方法。
+ `this.name` 当前文件(路由)的名字。
+ `this.context` 上下文对象, 即为 框架实例化后的对象。
> 这里可以调用 .get(key) 方法, 获取事先配置好的内容。
```js
var regexp = this.context.get('regexp') // 读取内置的常用的正则
console.log(this.context.$$xxx) // 假设之前安装了一个叫 xxx 的拓展包
```
#### `this.request` 本次请求体对象。
> 客户端请求里的所有的信息, 都能从这个对象中读取, 具体请查看[Request](https://github.com/bytedo/gmf.core/wiki/Request)。
#### `this.response` 本次响应体对象。
> 所有将要发送给客户端的操作, 都是通过该对象实现, 具体请查看[Response](https://github.com/bytedo/gmf.core/wiki/Response)。
#### `this.assign(key<String>, val<Any>)` 模板引擎的变量注册方法.
> 功能同php smarty的assign()。注册后的变量, 可以在模板中使用。
#### `this.render(filePath<String>, noParse<Boolean>)` 模板渲染方法, 需要在配置中开启模板引擎开关。
> 传入要渲染的模板的相对路径(相对于初始化时配置的模板目录); 第2个方法是"是否不解析模板", 默认为false。 对于需要渲染模板, 但又不需要填充数据的页面, 可以传入true, 提高性能。
#### `this.jwt(data<Object>)` json web token的操作, 需要在配置中开启jwt。
> 如果有传参, 则是对参数进行签名, 返回签名后的token, 这个token可直接传给客户端。
> 如果不传参, 则是校验客户端发送上来的token, 如果校验成功, 则可以得到之前签名的数据, 如果返回false, 则表示校验失败。如果返回undefined, 则为没有要校验的token。
> 校验的操作, 建议放在 `__main__()` 方法中执行, 避免多次调用导致重复校验, 浪费性能。
#### `this.cookie(key<String>, val<String>, opt<Object>)` cookie的读写操作。
> 只传key为读取, 传val为写入, opt字段, 提供一些额外的配置, 如有效期, 域等。 跟jq的cookie()方法使用一致。这里不再重复说明。
#### `this.session(key<String>, val<String>)` session的读写操作, 需要在配置中开启session。
> 只传key为读取, 传val为写入。
> 要注意的是, 读取返回的是一个Promise对象。写入不返回值。
#### `this.xdebug(err<String>)` cookie的读写操作。
> 往响应头中写入x-debug字段, 输出一些debug的信息, 支持多次调用, 会追加输出。
----
上一节: [⟪跨域配置⟫](https://github.com/bytedo/gmf.core/wiki/Cors)
下一节: [⟪Request⟫](https://github.com/bytedo/gmf.core/wiki/Request)