gamecloud
Version:
game logic server over cloud
73 lines (59 loc) • 2.01 kB
Markdown
所有的用户自定义中间件存放于 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']
};
}
}
```