From aa3b7379afe551ff87159e4cececc2197d7cd3e9 Mon Sep 17 00:00:00 2001 From: yutent Date: Wed, 30 Aug 2023 14:52:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20Controller?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Controller.md | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 Controller.md diff --git a/Controller.md b/Controller.md new file mode 100644 index 0000000..22918fd --- /dev/null +++ b/Controller.md @@ -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, val)` 模板引擎的变量注册方法. +> 功能同php smarty的assign()。注册后的变量, 可以在模板中使用。 + +#### `this.render(filePath, noParse)` 模板渲染方法, 需要在配置中开启模板引擎开关。 +> 传入要渲染的模板的相对路径(相对于初始化时配置的模板目录); 第2个方法是"是否不解析模板", 默认为false。 对于需要渲染模板, 但又不需要填充数据的页面, 可以传入true, 提高性能。 + + +#### `this.jwt(data)` json web token的操作, 需要在配置中开启jwt。 +> 如果有传参, 则是对参数进行签名, 返回签名后的token, 这个token可直接传给客户端。 + +> 如果不传参, 则是校验客户端发送上来的token, 如果校验成功, 则可以得到之前签名的数据, 如果返回false, 则表示校验失败。如果返回undefined, 则为没有要校验的token。 +> 校验的操作, 建议放在 `__main__()` 方法中执行, 避免多次调用导致重复校验, 浪费性能。 + + + +#### `this.cookie(key, val, opt)` cookie的读写操作。 +> 只传key为读取, 传val为写入, opt字段, 提供一些额外的配置, 如有效期, 域等。 跟jq的cookie()方法使用一致。这里不再重复说明。 + + +#### `this.session(key, val)` session的读写操作, 需要在配置中开启session。 +> 只传key为读取, 传val为写入。 + +> 要注意的是, 读取返回的是一个Promise对象。写入不返回值。 + + +#### `this.xdebug(err)` cookie的读写操作。 +> 往响应头中写入x-debug字段, 输出一些debug的信息, 支持多次调用, 会追加输出。 + + + + +---- + +上一节: [⟪跨域配置⟫](https://github.com/bytedo/gmf.core/wiki/Cors) + +下一节: [⟪Request⟫](https://github.com/bytedo/gmf.core/wiki/Request) + +