UNPKG

2.01 kBMarkdownView Raw
1# 中间件
2
3## 中间件的存储
4
5所有的用户自定义中间件存放于 app/middleware/ 目录下
6
7## 中间件的书写
8
9中间件的可索引名称就是存放中间件的文件名,每个文件中包含一个异步函数,如下所示:
10
11```js
12/**
13 * test
14 * @param {MiddlewareParam} sofar
15 */
16async function handle(sofar) {
17 //取得当前用户对象,其内部结构为:
18 // {
19 // domain //用户域
20 // openid //用户标识
21 // sign //用户令牌
22 // time //标识令牌有效期的时间戳
23 // socket //通讯句柄
24 // }
25 let user = sofar.socket.user;
26
27 //取得当前上行消息
28 let msg = sofar.msg;
29
30 //下行信息给客户端,执行失败时需要借此通知错误信息:
31 sofar.fn({ code: ReturnCode.userIllegal });
32
33 //终止当前中间件以及所有后续中间件的执行:
34 sofar.recy = false;
35 return;
36}
37
38//补充说明 - MiddlewareParam 定义如下:
39const MiddlewareParam = {
40 socket:null, //通讯组件
41 msg:{}, //消息
42 fn: null, //回调函数
43 recy:true, //中继标志:true 按顺序传递信息流到下一个中间件 false 终止传递
44 facade: null //门面对象,访问各种全局服务的界面
45};
46```
47
48## 中间件的配置
49
50中间件可以配置于各个控制器的 middleware 函数中,对输入流进行依序处理,例如:
51
52```js
53class test extends facade.Control {
54 get middleware() {
55 return ['parseParams', 'commonHandle'];
56 }
57}
58```
59如上代码指示对造访控制器test的信息流,依次应用 parseParams 和 commonHandle 这两个中间件进行处理
60
61中间件的默认配置位于 CoreBase 类中:
62
63```js
64class CoreOfBase
65{
66 constructor($env) {
67 //中间件设定,子类可覆盖
68 this.middlewareSetting = {
69 default: ['parseParams', 'commonHandle']
70 };
71 }
72}
73```
\No newline at end of file