UNPKG

gamecloud

Version:
73 lines (59 loc) 2.01 kB
# 中间件 ## 中间件的存储 所有的用户自定义中间件存放于 app/middleware/ 目录下 ## 中间件的书写 中间件的可索引名称就是存放中间件的文件名,每个文件中包含一个异步函数,如下所示: ```js /** * test * @param {MiddlewareParam} sofar */ async function handle(sofar) { //取得当前用户对象,其内部结构为: // { // domain //用户域 // openid //用户标识 // sign //用户令牌 // time //标识令牌有效期的时间戳 // socket //通讯句柄 // } let user = sofar.socket.user; //取得当前上行消息 let msg = sofar.msg; //下行信息给客户端,执行失败时需要借此通知错误信息: sofar.fn({ code: ReturnCode.userIllegal }); //终止当前中间件以及所有后续中间件的执行: sofar.recy = false; return; } //补充说明 - MiddlewareParam 定义如下: const MiddlewareParam = { socket:null, //通讯组件 msg:{}, //消息 fn: null, //回调函数 recy:true, //中继标志:true 按顺序传递信息流到下一个中间件 false 终止传递 facade: null //门面对象,访问各种全局服务的界面 }; ``` ## 中间件的配置 中间件可以配置于各个控制器的 middleware 函数中,对输入流进行依序处理,例如: ```js class test extends facade.Control { get middleware() { return ['parseParams', 'commonHandle']; } } ``` 如上代码指示对造访控制器test的信息流,依次应用 parseParams 和 commonHandle 这两个中间件进行处理 中间件的默认配置位于 CoreBase 类中: ```js class CoreOfBase { constructor($env) { //中间件设定,子类可覆盖 this.middlewareSetting = { default: ['parseParams', 'commonHandle'] }; } } ```