dinegg 3.8.3 → 3.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2021 三生石
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2021 三生石
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,186 +1,186 @@
1
- <!--
2
- * @copyright: Huang Ding
3
- * @Author: ding-cx
4
- * @Date: 2021-01-29 14:58:29
5
- * @LastEditors: ding
6
- * @LastEditTime: 2023-09-05 12:40:21
7
- * @Description: file content
8
- -->
9
-
10
- # dinegg
11
-
12
- dinegg framework is base eggjs, use typescript develop.
13
-
14
-
15
- ## QuickStart
16
-
17
- ```bash
18
- $ npm install
19
- $ npm test
20
- ```
21
-
22
- publish your framework to npm, then change app's framework config:
23
-
24
- ```js
25
- // {app_root}/index.js
26
- {
27
- "name": "my-project",
28
- "egg": {
29
- "framework": "dinegg"
30
- }
31
- }
32
- ```
33
- ## v3.3.0
34
- 添加多进程直连socket通讯机制逻辑
35
-
36
- ## v3 breaking change
37
-
38
- - dinegg v3 使用最新 3.0 的 egg,由于 egg3 最低支持 node 14.20,因此使用 dinegg v3 也不再兼容低版本 node,当前推荐使用 16/18
39
- - sequelize 使用最新版的 6.0 版本
40
- - dinegg v3 强烈不建议在 service 中访问 ctx 上的属性,所有的 http 入参(body,params,query,header)等,都建议只在 controller 中获取。响应也只能在 controller 中返回统一对象。然后显示传递参数给到service,也就是说将service作为业务逻辑方法库,提供明确的入参出参。不直接访问ctx
41
- - controller和service等在modules和原egg中可同时声明,但二者最终会合并,如果出现相同目录,将被覆盖,覆盖方式:modules优先
42
-
43
-
44
- ## 使用 modules 封装业务逻辑代码在同一个目录下
45
-
46
- - 将 service、controller、middleware 等文件放在同一个目录,类似 nest 的模块组织程序结构。
47
- - 文件名以这些单词结尾,如 a.service.ts
48
-
49
- 使用指南:
50
-
51
- - 文件放置在 app/modules 目录下,以模块划分目录。如 app/modules/user/login.service.ts
52
- - 配置 config.modules 可以设置哪些模块导出(可控制哪些用哪些不用)。注意这里同时最好同步设置 ets 相关配置,这样代码提示也就不会有未导出的模块功能。
53
- - breking: 控制器定义必须以.controller.ts 结尾,在原 egg 定义的,第一层目录就必须与 module 的配置导出名一致才能引用到。
54
- - 注意,由于使用的.controller.ts 这种后缀,对原 egg 的控制器加载会有影响,原 egg 需同样后缀,且,如果使用了模块导出,原 egg 也必须外部套一层模块名目录。
55
-
56
- ```
57
- //支持的文件
58
- **/*.service.ts
59
- **/*.controller.ts
60
- **/router.ts
61
- task/*.ts
62
- schedule/*.ts
63
- app.ts
64
- agent.ts
65
- ```
66
-
67
- ```config.js
68
- // 配置文件
69
- config.modules = {
70
- imports: ["mod_user","cat"],//配置需要使用的模块
71
- enable:true,//此属性配置用于开启module。开启后必须遵从本文档指南撰写代码,否则将和egg原来的方式造成冲突。
72
- };
73
-
74
- // tshelper.js
75
- require('dinegg/lib/tshelper')([moduleName1,mod2])
76
- ```
77
-
78
- - 使用
79
-
80
- ```
81
- //service
82
- this.ctx.service.
83
- //controller
84
- app.controller.
85
- //schedule 定时任务,从模块目录下的task/或者schedule/目录读取任务文件。只匹配模块下的第一层目录。*/task/task1.ts 和 */schedule/task2.ts
86
-
87
- ```
88
-
89
- ## permission 权限控制
90
-
91
- - 装饰器@permission
92
-
93
- 装饰器可以从 controllerDecorator 和 serviceDecorator 导入,效果一致!
94
-
95
- ```ts
96
- // controller.ts
97
- import { permission, get } from "dinegg/decorator";
98
-
99
- class Controller {
100
- @get("/api/abc")
101
- @permission(["abc:bcd"])
102
- async method() {}
103
- }
104
- ```
105
-
106
- - 权限控制类实现及使用
107
-
108
- ```ts
109
- // 自定义权限控制实现类
110
- import { AbstractPermissionAccessControl } from "egg";
111
-
112
- export default class RoleAccessControl2 extends AbstractPermissionAccessControl {
113
- async main() {
114
- const userRole = this.ctx.request.query.myRole;
115
- console.log("userRole", userRole);
116
- if (this.permId.includes(userRole)) {
117
- return true;
118
- } else {
119
- throw new Error(`抱歉,您没有权限!需要的权限:${this.permId.toString()}`);
120
- }
121
- }
122
- }
123
-
124
- // app.ts 在app.ts中绑定后即可使用。在控制器或service的方法上绑定装饰器,如果验证权限失败会抛出错误。
125
- import { Application, IBoot } from "egg";
126
- import PermissionAccessControl from "./PermissionAccessControl";
127
- // import * as path from "path"
128
-
129
- export default class AppInit implements IBoot {
130
- private readonly app: Application;
131
-
132
- constructor(_app: Application) {
133
- this.app = _app;
134
- this.app.PermissionAccessControl = PermissionAccessControl;
135
- }
136
-
137
- async willReady() {}
138
- }
139
- ```
140
-
141
- ## cache 内存缓存简单实现 map 接口
142
-
143
- - `this.app.cache.set()`
144
- - `this.app.cache.get()`
145
- - `this.app.cache.remove()`
146
- - `this.app.cache.clear()`
147
-
148
- - 使用方式 dts 声明
149
-
150
- ```ts
151
- /**
152
- * 添加一个缓存
153
- *
154
- * @param {string} key 字段key,注意不能重复
155
- * @param {*} value
156
- * @param {number} seconds 缓存时间,按s为单位 默认20s
157
- * @memberof AppCache
158
- */
159
- set(key: string, value: any, expire: number = 20): boolean;
160
- /**
161
- * 获取缓存
162
- *
163
- * @template T
164
- * @param {string} key
165
- * @return {*} {(T | null)}
166
- * @memberof AppCache
167
- */
168
- get<T extends any>(key: string): T | null;
169
- remove(key: string): boolean;
170
- delete(key: string): boolean;
171
- /** 移除已过期的key value */
172
- removeExpired(): boolean;
173
- /** 重置整个map为新的,原来的放弃,被垃圾回收 */
174
- reset(): void;
175
- /** 重置整个map为新的,原来的放弃,被垃圾回收 */
176
- clear(): void;
177
- ```
178
-
179
- ## dineggApiClient 进程直连通讯
180
-
181
- egg多进程默认使用ipc在agent与app之间通讯,这是需要通过node默认的cluster机制,由master中转来实现的。
182
- dinegg参考egg官方文档,实现了一套直连通讯机制接口
183
-
184
- ## Questions & Suggestions
185
-
186
- Please open an issue [here](https://gitee.com/dingiyan/dinegg/issues).
1
+ <!--
2
+ * @copyright: Huang Ding
3
+ * @Author: ding-cx
4
+ * @Date: 2021-01-29 14:58:29
5
+ * @LastEditors: ding
6
+ * @LastEditTime: 2023-09-05 12:40:21
7
+ * @Description: file content
8
+ -->
9
+
10
+ # dinegg
11
+
12
+ dinegg framework is base eggjs, use typescript develop.
13
+
14
+
15
+ ## QuickStart
16
+
17
+ ```bash
18
+ $ npm install
19
+ $ npm test
20
+ ```
21
+
22
+ publish your framework to npm, then change app's framework config:
23
+
24
+ ```js
25
+ // {app_root}/index.js
26
+ {
27
+ "name": "my-project",
28
+ "egg": {
29
+ "framework": "dinegg"
30
+ }
31
+ }
32
+ ```
33
+ ## v3.3.0
34
+ 添加多进程直连socket通讯机制逻辑
35
+
36
+ ## v3 breaking change
37
+
38
+ - dinegg v3 使用最新 3.0 的 egg,由于 egg3 最低支持 node 14.20,因此使用 dinegg v3 也不再兼容低版本 node,当前推荐使用 16/18
39
+ - sequelize 使用最新版的 6.0 版本
40
+ - dinegg v3 强烈不建议在 service 中访问 ctx 上的属性,所有的 http 入参(body,params,query,header)等,都建议只在 controller 中获取。响应也只能在 controller 中返回统一对象。然后显示传递参数给到service,也就是说将service作为业务逻辑方法库,提供明确的入参出参。不直接访问ctx
41
+ - controller和service等在modules和原egg中可同时声明,但二者最终会合并,如果出现相同目录,将被覆盖,覆盖方式:modules优先
42
+
43
+
44
+ ## 使用 modules 封装业务逻辑代码在同一个目录下
45
+
46
+ - 将 service、controller、middleware 等文件放在同一个目录,类似 nest 的模块组织程序结构。
47
+ - 文件名以这些单词结尾,如 a.service.ts
48
+
49
+ 使用指南:
50
+
51
+ - 文件放置在 app/modules 目录下,以模块划分目录。如 app/modules/user/login.service.ts
52
+ - 配置 config.modules 可以设置哪些模块导出(可控制哪些用哪些不用)。注意这里同时最好同步设置 ets 相关配置,这样代码提示也就不会有未导出的模块功能。
53
+ - breking: 控制器定义必须以.controller.ts 结尾,在原 egg 定义的,第一层目录就必须与 module 的配置导出名一致才能引用到。
54
+ - 注意,由于使用的.controller.ts 这种后缀,对原 egg 的控制器加载会有影响,原 egg 需同样后缀,且,如果使用了模块导出,原 egg 也必须外部套一层模块名目录。
55
+
56
+ ```
57
+ //支持的文件
58
+ **/*.service.ts
59
+ **/*.controller.ts
60
+ **/router.ts
61
+ task/*.ts
62
+ schedule/*.ts
63
+ app.ts
64
+ agent.ts
65
+ ```
66
+
67
+ ```config.js
68
+ // 配置文件
69
+ config.modules = {
70
+ imports: ["mod_user","cat"],//配置需要使用的模块
71
+ enable:true,//此属性配置用于开启module。开启后必须遵从本文档指南撰写代码,否则将和egg原来的方式造成冲突。
72
+ };
73
+
74
+ // tshelper.js
75
+ require('dinegg/lib/tshelper')([moduleName1,mod2])
76
+ ```
77
+
78
+ - 使用
79
+
80
+ ```
81
+ //service
82
+ this.ctx.service.
83
+ //controller
84
+ app.controller.
85
+ //schedule 定时任务,从模块目录下的task/或者schedule/目录读取任务文件。只匹配模块下的第一层目录。*/task/task1.ts 和 */schedule/task2.ts
86
+
87
+ ```
88
+
89
+ ## permission 权限控制
90
+
91
+ - 装饰器@permission
92
+
93
+ 装饰器可以从 controllerDecorator 和 serviceDecorator 导入,效果一致!
94
+
95
+ ```ts
96
+ // controller.ts
97
+ import { permission, get } from "dinegg/decorator";
98
+
99
+ class Controller {
100
+ @get("/api/abc")
101
+ @permission(["abc:bcd"])
102
+ async method() {}
103
+ }
104
+ ```
105
+
106
+ - 权限控制类实现及使用
107
+
108
+ ```ts
109
+ // 自定义权限控制实现类
110
+ import { AbstractPermissionAccessControl } from "egg";
111
+
112
+ export default class RoleAccessControl2 extends AbstractPermissionAccessControl {
113
+ async main() {
114
+ const userRole = this.ctx.request.query.myRole;
115
+ console.log("userRole", userRole);
116
+ if (this.permId.includes(userRole)) {
117
+ return true;
118
+ } else {
119
+ throw new Error(`抱歉,您没有权限!需要的权限:${this.permId.toString()}`);
120
+ }
121
+ }
122
+ }
123
+
124
+ // app.ts 在app.ts中绑定后即可使用。在控制器或service的方法上绑定装饰器,如果验证权限失败会抛出错误。
125
+ import { Application, IBoot } from "egg";
126
+ import PermissionAccessControl from "./PermissionAccessControl";
127
+ // import * as path from "path"
128
+
129
+ export default class AppInit implements IBoot {
130
+ private readonly app: Application;
131
+
132
+ constructor(_app: Application) {
133
+ this.app = _app;
134
+ this.app.PermissionAccessControl = PermissionAccessControl;
135
+ }
136
+
137
+ async willReady() {}
138
+ }
139
+ ```
140
+
141
+ ## cache 内存缓存简单实现 map 接口
142
+
143
+ - `this.app.cache.set()`
144
+ - `this.app.cache.get()`
145
+ - `this.app.cache.remove()`
146
+ - `this.app.cache.clear()`
147
+
148
+ - 使用方式 dts 声明
149
+
150
+ ```ts
151
+ /**
152
+ * 添加一个缓存
153
+ *
154
+ * @param {string} key 字段key,注意不能重复
155
+ * @param {*} value
156
+ * @param {number} seconds 缓存时间,按s为单位 默认20s
157
+ * @memberof AppCache
158
+ */
159
+ set(key: string, value: any, expire: number = 20): boolean;
160
+ /**
161
+ * 获取缓存
162
+ *
163
+ * @template T
164
+ * @param {string} key
165
+ * @return {*} {(T | null)}
166
+ * @memberof AppCache
167
+ */
168
+ get<T extends any>(key: string): T | null;
169
+ remove(key: string): boolean;
170
+ delete(key: string): boolean;
171
+ /** 移除已过期的key value */
172
+ removeExpired(): boolean;
173
+ /** 重置整个map为新的,原来的放弃,被垃圾回收 */
174
+ reset(): void;
175
+ /** 重置整个map为新的,原来的放弃,被垃圾回收 */
176
+ clear(): void;
177
+ ```
178
+
179
+ ## dineggApiClient 进程直连通讯
180
+
181
+ egg多进程默认使用ipc在agent与app之间通讯,这是需要通过node默认的cluster机制,由master中转来实现的。
182
+ dinegg参考egg官方文档,实现了一套直连通讯机制接口
183
+
184
+ ## Questions & Suggestions
185
+
186
+ Please open an issue [here](https://gitee.com/dingiyan/dinegg/issues).
@@ -71,6 +71,15 @@ exports.default = () => {
71
71
  directory: "app/repos",
72
72
  call: true,
73
73
  },
74
+ // 挂载仓库,主要针对ctx,每次请求都会实例化
75
+ repository: {
76
+ inject: "ctx",
77
+ loadunit: false,
78
+ override: false,
79
+ caseStyle: "lower",
80
+ directory: "app/repository",
81
+ call: true,
82
+ },
74
83
  // 封装与ctx上下文无关的业务逻辑,纯业务逻辑,从service中可提取纯的业务逻辑,不涉及ctx访问。
75
84
  functions: {
76
85
  inject: "app",
@@ -86,4 +95,4 @@ exports.default = () => {
86
95
  };
87
96
  return config;
88
97
  };
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb25maWcuZGVmYXVsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBQ0gsWUFBWSxDQUFDOztBQUdiLDZCQUE2QjtBQUU3QixrQkFBZSxHQUFHLEVBQUU7SUFDbkIsTUFBTSxNQUFNLEdBQUcsRUFBZ0MsQ0FBQztJQUNoRCw4QkFBOEI7SUFDOUIsNkJBQTZCO0lBRTdCLFdBQVc7SUFDWCxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2pCLElBQUksRUFBRSxLQUFLO1FBQ1gsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDO0tBQ3RCLENBQUM7SUFDRixrQkFBa0I7SUFDbEIsTUFBTSxDQUFDLElBQUksR0FBRztRQUNiLE1BQU0sRUFBRSxHQUFHO1FBQ1gsWUFBWSxFQUFFLHdDQUF3QztLQUN0RCxDQUFDO0lBRUYsNkJBQTZCO0lBQzdCLE1BQU0sQ0FBQyxVQUFVLEdBQUc7UUFDbkIsU0FBUyxFQUFFLE9BQU87UUFDbEIsU0FBUyxFQUFFLE9BQU87S0FDbEIsQ0FBQztJQUVGLFVBQVU7SUFDVixNQUFNLENBQUMsTUFBTSxHQUFHO1FBQ2YsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNyQyxVQUFVLEVBQUUsS0FBSztRQUNqQixZQUFZLEVBQUUsTUFBTTtLQUNwQixDQUFDO0lBQ0YsTUFBTSxDQUFDLFlBQVksR0FBRztJQUNyQixtQkFBbUI7SUFDbkIseURBQXlEO0lBQ3pELElBQUk7S0FDSixDQUFDO0lBRUYscUJBQXFCO0lBQ3JCLE1BQU0sQ0FBQyxHQUFHLEdBQUc7UUFDWixNQUFNLEVBQUUsZ0RBQWdEO0tBQ3hELENBQUM7SUFFRixNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2pCLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLElBQUk7UUFDYixjQUFjLEVBQUUsRUFBRTtLQUNsQixDQUFDO0lBRUYsTUFBTSxDQUFDLGlCQUFpQixHQUFHO1FBQzFCLE1BQU0sRUFBRSxJQUFJO0tBQ1osQ0FBQztJQUVGLGtCQUFrQjtJQUNsQixNQUFNLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUV0QixNQUFNLENBQUMsWUFBWSxHQUFHO1FBQ3JCLGdCQUFnQjtRQUNoQixNQUFNLEVBQUU7WUFDUCxNQUFNLEVBQUUsS0FBSztZQUNiLFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLEtBQUs7WUFDZixTQUFTLEVBQUUsT0FBTztZQUNsQixTQUFTLEVBQUUsWUFBWTtTQUN2QjtRQUNELDhDQUE4QztRQUM5QyxLQUFLLEVBQUU7WUFDTixNQUFNLEVBQUUsS0FBSztZQUNiLFFBQVEsRUFBRSxLQUFLO1lBQ2YsUUFBUSxFQUFFLEtBQUs7WUFDZixTQUFTLEVBQUUsT0FBTztZQUNsQixTQUFTLEVBQUUsV0FBVztZQUN0QixJQUFJLEVBQUUsSUFBSTtTQUNWO1FBRUQsc0RBQXNEO1FBQ3RELFNBQVMsRUFBRTtZQUNWLE1BQU0sRUFBRSxLQUFLO1lBQ2IsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsS0FBSztZQUNmLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFNBQVMsRUFBRSxlQUFlO1lBQzFCLElBQUksRUFBRSxJQUFJO1NBQ1Y7S0FDRCxDQUFDO0lBRUYsTUFBTSxDQUFDLElBQUksR0FBRztJQUNiLHdCQUF3QjtLQUN4QixDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDLENBQUMifQ==
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb25maWcuZGVmYXVsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBQ0gsWUFBWSxDQUFDOztBQUdiLDZCQUE2QjtBQUU3QixrQkFBZSxHQUFHLEVBQUU7SUFDbkIsTUFBTSxNQUFNLEdBQUcsRUFBZ0MsQ0FBQztJQUNoRCw4QkFBOEI7SUFDOUIsNkJBQTZCO0lBRTdCLFdBQVc7SUFDWCxNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2pCLElBQUksRUFBRSxLQUFLO1FBQ1gsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDO0tBQ3RCLENBQUM7SUFDRixrQkFBa0I7SUFDbEIsTUFBTSxDQUFDLElBQUksR0FBRztRQUNiLE1BQU0sRUFBRSxHQUFHO1FBQ1gsWUFBWSxFQUFFLHdDQUF3QztLQUN0RCxDQUFDO0lBRUYsNkJBQTZCO0lBQzdCLE1BQU0sQ0FBQyxVQUFVLEdBQUc7UUFDbkIsU0FBUyxFQUFFLE9BQU87UUFDbEIsU0FBUyxFQUFFLE9BQU87S0FDbEIsQ0FBQztJQUVGLFVBQVU7SUFDVixNQUFNLENBQUMsTUFBTSxHQUFHO1FBQ2YsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNyQyxVQUFVLEVBQUUsS0FBSztRQUNqQixZQUFZLEVBQUUsTUFBTTtLQUNwQixDQUFDO0lBQ0YsTUFBTSxDQUFDLFlBQVksR0FBRztJQUNyQixtQkFBbUI7SUFDbkIseURBQXlEO0lBQ3pELElBQUk7S0FDSixDQUFDO0lBRUYscUJBQXFCO0lBQ3JCLE1BQU0sQ0FBQyxHQUFHLEdBQUc7UUFDWixNQUFNLEVBQUUsZ0RBQWdEO0tBQ3hELENBQUM7SUFFRixNQUFNLENBQUMsUUFBUSxHQUFHO1FBQ2pCLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLElBQUk7UUFDYixjQUFjLEVBQUUsRUFBRTtLQUNsQixDQUFDO0lBRUYsTUFBTSxDQUFDLGlCQUFpQixHQUFHO1FBQzFCLE1BQU0sRUFBRSxJQUFJO0tBQ1osQ0FBQztJQUVGLGtCQUFrQjtJQUNsQixNQUFNLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUV0QixNQUFNLENBQUMsWUFBWSxHQUFHO1FBQ3JCLGdCQUFnQjtRQUNoQixNQUFNLEVBQUU7WUFDUCxNQUFNLEVBQUUsS0FBSztZQUNiLFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLEtBQUs7WUFDZixTQUFTLEVBQUUsT0FBTztZQUNsQixTQUFTLEVBQUUsWUFBWTtTQUN2QjtRQUNELDhDQUE4QztRQUM5QyxLQUFLLEVBQUU7WUFDTixNQUFNLEVBQUUsS0FBSztZQUNiLFFBQVEsRUFBRSxLQUFLO1lBQ2YsUUFBUSxFQUFFLEtBQUs7WUFDZixTQUFTLEVBQUUsT0FBTztZQUNsQixTQUFTLEVBQUUsV0FBVztZQUN0QixJQUFJLEVBQUUsSUFBSTtTQUNWO1FBQ0QseUJBQXlCO1FBQ3pCLFVBQVUsRUFBRTtZQUNYLE1BQU0sRUFBRSxLQUFLO1lBQ2IsUUFBUSxFQUFFLEtBQUs7WUFDZixRQUFRLEVBQUUsS0FBSztZQUNmLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsSUFBSSxFQUFFLElBQUk7U0FDVjtRQUVELHNEQUFzRDtRQUN0RCxTQUFTLEVBQUU7WUFDVixNQUFNLEVBQUUsS0FBSztZQUNiLFFBQVEsRUFBRSxJQUFJO1lBQ2QsUUFBUSxFQUFFLEtBQUs7WUFDZixTQUFTLEVBQUUsT0FBTztZQUNsQixTQUFTLEVBQUUsZUFBZTtZQUMxQixJQUFJLEVBQUUsSUFBSTtTQUNWO0tBQ0QsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLEdBQUc7SUFDYix3QkFBd0I7S0FDeEIsQ0FBQztJQUVGLE9BQU8sTUFBTSxDQUFDO0FBQ2YsQ0FBQyxDQUFDIn0=
@@ -1,5 +1,5 @@
1
- 'use strict';
2
- module.exports = {
3
- 'jwt verify error or the token was expired.': 'jwt verify error or the token was expired.',
4
- 'can not found token on header or query.': 'can not found token on header or query.',
5
- };
1
+ 'use strict';
2
+ module.exports = {
3
+ 'jwt verify error or the token was expired.': 'jwt verify error or the token was expired.',
4
+ 'can not found token on header or query.': 'can not found token on header or query.',
5
+ };
@@ -1,5 +1,5 @@
1
- 'use strict';
2
- module.exports = {
3
- 'jwt verify error or the token was expired.': 'jwt身份认证失败!',
4
- 'can not found token on header or query.': '请求中未携带token!',
5
- };
1
+ 'use strict';
2
+ module.exports = {
3
+ 'jwt verify error or the token was expired.': 'jwt身份认证失败!',
4
+ 'can not found token on header or query.': '请求中未携带token!',
5
+ };
@@ -1,6 +1,6 @@
1
- import { Application, Context } from "egg";
1
+ import { Application } from "egg";
2
2
  import "reflect-metadata";
3
- type MiddlewaresType = ((ctx: Context, next: () => Promise<void>) => Promise<void>)[];
3
+ import { MiddlewaresType } from "./routeMetadata";
4
4
  /** 装饰器,get请求 */
5
5
  export declare function get(path: string | string[], middlewares?: MiddlewaresType): (target: any, name: string, descriptor: PropertyDescriptor) => void;
6
6
  /** 装饰器,post请求 */
@@ -24,4 +24,3 @@ export declare function controller(opt: {
24
24
  * 遍历所有的控制器方法然后绑定
25
25
  */
26
26
  export declare function bindRouter(app: Application): void;
27
- export {};
@@ -2,26 +2,50 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.bindRouter = exports.controller = exports.patch = exports.del = exports.put = exports.post = exports.get = void 0;
4
4
  require("reflect-metadata");
5
- const routeSymbolKey = Symbol.for("dinegg#Route");
5
+ const routeMetadata_1 = require("./routeMetadata");
6
6
  const controllerMappingKey = Symbol.for("dinegg#controllerMapping");
7
7
  /**
8
8
  * factory create a route bind . decorator for class method.
9
9
  */
10
10
  function createRoute(method = "get", path, middlewares) {
11
- // @ts-ignore
11
+ // 24.10.26 use Reflect Metadata
12
12
  return function (target, name, descriptor) {
13
- if (!descriptor.value[routeSymbolKey]) {
14
- descriptor.value[routeSymbolKey] = [];
13
+ if (typeof descriptor.value !== "function")
14
+ return;
15
+ let routeMetadata = (0, routeMetadata_1.getRouteMetaData)(target.constructor);
16
+ if (!routeMetadata[name]) {
17
+ routeMetadata[name] = [];
15
18
  }
16
19
  if (Array.isArray(path)) {
17
20
  for (const pathItem of path) {
18
- descriptor.value[routeSymbolKey].push({ method: method, path: pathItem, middlewares });
21
+ routeMetadata[name].push({
22
+ method: method,
23
+ path: pathItem,
24
+ middlewares,
25
+ });
19
26
  }
20
27
  }
21
28
  else {
22
- descriptor.value[routeSymbolKey].push({ method: method, path, middlewares });
29
+ routeMetadata[name].push({ method: method, path, middlewares });
23
30
  }
24
31
  };
32
+ // return function (target: any, name: string, descriptor: PropertyDescriptor) {
33
+ // if (typeof descriptor.value !== "function") return;
34
+ // if (!descriptor.value[routeSymbolKey]) {
35
+ // descriptor.value[routeSymbolKey] = [];
36
+ // }
37
+ // if (Array.isArray(path)) {
38
+ // for (const pathItem of path) {
39
+ // descriptor.value[routeSymbolKey].push({
40
+ // method: method,
41
+ // path: pathItem,
42
+ // middlewares,
43
+ // });
44
+ // }
45
+ // } else {
46
+ // descriptor.value[routeSymbolKey].push({ method: method, path, middlewares });
47
+ // }
48
+ // };
25
49
  }
26
50
  /** 装饰器,get请求 */
27
51
  function get(path, middlewares) {
@@ -73,7 +97,7 @@ function reduceControllerMethod(router, controller) {
73
97
  return reduceControllerMethod(router, controller[item]);
74
98
  }
75
99
  //若函数,注册路由 note : 此处之所以能拿到,是因为dinegg重写了控制器的loader
76
- const routeObjArr = controller[item][routeSymbolKey];
100
+ const routeObjArr = controller[item][routeMetadata_1.routeSymbolKey];
77
101
  if (!routeObjArr || !Array.isArray(routeObjArr)) {
78
102
  return;
79
103
  }
@@ -123,4 +147,4 @@ function bindRouter(app) {
123
147
  reduceControllerMethod(app.router, app.controller);
124
148
  }
125
149
  exports.bindRouter = bindRouter;
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbGxlckRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkNvbnRyb2xsZXJEZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBVUEsNEJBQTBCO0FBRTFCLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDbEQsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFLcEU7O0dBRUc7QUFDSCxTQUFTLFdBQVcsQ0FBQyxTQUFzQixLQUFLLEVBQUUsSUFBdUIsRUFBRSxXQUE2QjtJQUN2RyxhQUFhO0lBQ2IsT0FBTyxVQUFVLE1BQU0sRUFBRSxJQUFZLEVBQUUsVUFBOEI7UUFDcEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDdEMsVUFBVSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDdEM7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLEVBQUU7Z0JBQzVCLFVBQVUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7YUFDdkY7U0FDRDthQUFNO1lBQ04sVUFBVSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1NBQzdFO0lBQ0YsQ0FBQyxDQUFDO0FBQ0gsQ0FBQztBQUVELGdCQUFnQjtBQUNoQixTQUFnQixHQUFHLENBQUMsSUFBdUIsRUFBRSxXQUE2QjtJQUN6RSxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFGRCxrQkFFQztBQUVELGlCQUFpQjtBQUNqQixTQUFnQixJQUFJLENBQUMsSUFBdUIsRUFBRSxXQUE2QjtJQUMxRSxPQUFPLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFGRCxvQkFFQztBQUNELGdCQUFnQjtBQUNoQixTQUFnQixHQUFHLENBQUMsSUFBdUIsRUFBRSxXQUE2QjtJQUN6RSxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFGRCxrQkFFQztBQUNELGdCQUFnQjtBQUNoQixTQUFnQixHQUFHLENBQUMsSUFBdUIsRUFBRSxXQUE2QjtJQUN6RSxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFGRCxrQkFFQztBQUNELGtCQUFrQjtBQUNsQixTQUFnQixLQUFLLENBQUMsSUFBdUIsRUFBRSxXQUE2QjtJQUMzRSxPQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFGRCxzQkFFQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixVQUFVLENBQUMsR0FBK0M7SUFDekUsT0FBTyxVQUFVLFdBQXFCO1FBQ3JDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFtQixDQUFDO0lBQzdELENBQUMsQ0FBQztBQUNILENBQUM7QUFKRCxnQ0FJQztBQUVELHlEQUF5RDtBQUV6RCxrRUFBa0U7QUFDbEUsU0FBUyxzQkFBc0IsQ0FBQyxNQUFjLEVBQUUsVUFBZTtJQUM5RCxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxpQkFBaUIsRUFBRTtRQUNyRSxTQUFTO1FBQ1QsT0FBTztLQUNQO0lBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV6QyxhQUFhO0lBQ2IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3pCLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsRUFBRTtZQUM1QyxPQUFPLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN4RDtRQUNELGlEQUFpRDtRQUNqRCxNQUFNLFdBQVcsR0FBNEQsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTlHLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2hELE9BQU87U0FDUDtRQUNELE1BQU0sWUFBWSxHQUFhLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxFQUFFO1lBQ2pDLE1BQU0sS0FBSyxHQUFVLEVBQUUsQ0FBQztZQUN4QixXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzdCLHlCQUF5QjtnQkFDekIsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7b0JBQ2pDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2xCLE9BQU87aUJBQ1A7Z0JBQ0QsSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtvQkFDaEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO3dCQUMvQixNQUFNLFFBQVEscUJBQVEsS0FBSyxDQUFFLENBQUM7d0JBQzlCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTs0QkFDekIsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7eUJBQzVDOzZCQUFNOzRCQUNOLFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO3lCQUM3Qzt3QkFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN0QixDQUFDLENBQUMsQ0FBQztvQkFDSCxPQUFPO2lCQUNQO2dCQUNELGdDQUFnQztnQkFDaEMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQyxDQUFDO1FBRUYsS0FBSyxNQUFNLFFBQVEsSUFBSSxvQkFBb0IsRUFBRSxFQUFFO1lBQzlDLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFFOUIsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFO2dCQUN6QixNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDOUU7aUJBQU07Z0JBQ04sTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDckQ7U0FDRDtJQUNGLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLEdBQWdCO0lBQzFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFGRCxnQ0FFQyJ9
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbGxlckRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkNvbnRyb2xsZXJEZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBVUEsNEJBQTBCO0FBQzFCLG1EQUFvRjtBQUVwRixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUlwRTs7R0FFRztBQUNILFNBQVMsV0FBVyxDQUNuQixTQUFzQixLQUFLLEVBQzNCLElBQXVCLEVBQ3ZCLFdBQTZCO0lBRTdCLGdDQUFnQztJQUNoQyxPQUFPLFVBQVUsTUFBVyxFQUFFLElBQVksRUFBRSxVQUE4QjtRQUN6RSxJQUFJLE9BQU8sVUFBVSxDQUFDLEtBQUssS0FBSyxVQUFVO1lBQUUsT0FBTztRQUVuRCxJQUFJLGFBQWEsR0FBRyxJQUFBLGdDQUFnQixFQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV6RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDekI7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLEVBQUU7Z0JBQzVCLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ3hCLE1BQU0sRUFBRSxNQUFNO29CQUNkLElBQUksRUFBRSxRQUFRO29CQUNkLFdBQVc7aUJBQ1gsQ0FBQyxDQUFDO2FBQ0g7U0FDRDthQUFNO1lBQ04sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDaEU7SUFDRixDQUFDLENBQUM7SUFDRixnRkFBZ0Y7SUFDaEYsdURBQXVEO0lBRXZELDRDQUE0QztJQUM1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
@@ -3,7 +3,7 @@ import { Application, Context } from "egg";
3
3
  * 绑定方法权限标识的装饰器,实现控制器http请求时的权限控制
4
4
  * - 需外部定义角色验证规则来配合
5
5
  */
6
- export declare function permission(permId: string | string[]): (prototype: any, property: any, descriptor: PropertyDescriptor) => void;
6
+ export declare function permission(permId: string | string[]): (prototype: Object, property: string, descriptor: PropertyDescriptor) => void;
7
7
  /** 定义抽象类外部继承实现权限控制自定义类 */
8
8
  export declare abstract class AbstractPermissionAccessControl implements PermissionAccessControl {
9
9
  app: Application;