@eggjs/tegg-controller-plugin 1.3.3 → 1.5.1
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/CHANGELOG.md +33 -0
- package/README.md +28 -3
- package/lib/RootProtoManager.d.ts +1 -1
- package/lib/RootProtoManager.js +13 -3
- package/lib/impl/http/HTTPControllerRegister.d.ts +1 -0
- package/lib/impl/http/HTTPControllerRegister.js +11 -2
- package/lib/impl/http/HTTPMethodRegister.d.ts +5 -1
- package/lib/impl/http/HTTPMethodRegister.js +46 -10
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,39 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [1.5.1](https://github.com/eggjs/tegg/compare/@eggjs/tegg-controller-plugin@1.5.0...@eggjs/tegg-controller-plugin@1.5.1) (2022-08-17)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* fix rootProtoManager.registerRootProto ([f416ed7](https://github.com/eggjs/tegg/commit/f416ed70af1c46d31ebf712b208205d67337d958))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# [1.5.0](https://github.com/eggjs/tegg/compare/@eggjs/tegg-controller-plugin@1.4.1...@eggjs/tegg-controller-plugin@1.5.0) (2022-08-16)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* impl Host decorator ([#48](https://github.com/eggjs/tegg/issues/48)) ([65dc7a8](https://github.com/eggjs/tegg/commit/65dc7a899ba72dd0851c35046562766d7f2b71b6))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
# [1.4.0](https://github.com/eggjs/tegg/compare/@eggjs/tegg-controller-plugin@1.3.3...@eggjs/tegg-controller-plugin@1.4.0) (2022-07-28)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
### Features
|
|
32
|
+
|
|
33
|
+
* middleware decorator allow multi middleware function ([#46](https://github.com/eggjs/tegg/issues/46)) ([a4b55f7](https://github.com/eggjs/tegg/commit/a4b55f7065c3d78e2c98c4b05f01871f666542ef))
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
6
39
|
## [1.3.3](https://github.com/eggjs/tegg/compare/@eggjs/tegg-controller-plugin@1.3.2...@eggjs/tegg-controller-plugin@1.3.3) (2022-07-20)
|
|
7
40
|
|
|
8
41
|
**Note:** Version bump only for package @eggjs/tegg-controller-plugin
|
package/README.md
CHANGED
|
@@ -42,6 +42,7 @@ exports.teggController = {
|
|
|
42
42
|
## Usage
|
|
43
43
|
|
|
44
44
|
### Middleware
|
|
45
|
+
Middleware 支持多个入参,依次传入要生效的中间件
|
|
45
46
|
中间件注解,可以添加在类/方法上。添加在类上时,对类上所有方法生效,添加在方法上时,只对当前方法生效。
|
|
46
47
|
|
|
47
48
|
```ts
|
|
@@ -53,13 +54,17 @@ export default async function globalLog(ctx: Context, next: any) {
|
|
|
53
54
|
return next();
|
|
54
55
|
}
|
|
55
56
|
|
|
57
|
+
export default async function globalLog2(ctx: Context, next: any) {
|
|
58
|
+
ctx.logger.info('have a request2');
|
|
59
|
+
return next();
|
|
60
|
+
}
|
|
61
|
+
|
|
56
62
|
// app/controller/FooController.ts
|
|
57
63
|
import { Middleware } from '@eggjs/tegg';
|
|
58
|
-
|
|
59
|
-
@Middleware(globalLog)
|
|
64
|
+
@Middleware(globalLog,globalLog2)
|
|
60
65
|
export class FooController {
|
|
61
|
-
|
|
62
66
|
@Middleware(methodCount)
|
|
67
|
+
|
|
63
68
|
async hello() {
|
|
64
69
|
}
|
|
65
70
|
}
|
|
@@ -188,3 +193,23 @@ export class FooController {
|
|
|
188
193
|
// 具体 name 值可以查看 path-to-regexp
|
|
189
194
|
@HTTPParam({ name: '0' }) id: string
|
|
190
195
|
```
|
|
196
|
+
|
|
197
|
+
### Host
|
|
198
|
+
Host 注解,用于指定 HTTP 方法仅在 host 匹配时执行。
|
|
199
|
+
可以添加在类/方法上。添加在类上时,对类上所有方法生效,添加在方法上时,只对当前方法生效。方法上的注解可以覆盖类上的注解
|
|
200
|
+
|
|
201
|
+
```ts
|
|
202
|
+
// app/controller/FooController.ts
|
|
203
|
+
import { Host } from '@eggjs/tegg';
|
|
204
|
+
@Host('foo.eggjs.com')
|
|
205
|
+
export class FooController {
|
|
206
|
+
// 仅能通过 foo.eggjs.com 访问
|
|
207
|
+
async hello() {
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// 仅能通过 bar.eggjs.com 访问
|
|
211
|
+
@Host('bar.eggjs.com')
|
|
212
|
+
async bar() {
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
```
|
|
@@ -3,6 +3,6 @@ import { EggContext } from '@eggjs/tegg';
|
|
|
3
3
|
export declare type GetRootProtoCallback = (ctx: EggContext) => EggPrototype | undefined;
|
|
4
4
|
export declare class RootProtoManager {
|
|
5
5
|
protoMap: Map<string, GetRootProtoCallback[]>;
|
|
6
|
-
registerRootProto(method: string, cb: GetRootProtoCallback): void;
|
|
6
|
+
registerRootProto(method: string, cb: GetRootProtoCallback, host: string): void;
|
|
7
7
|
getRootProto(ctx: EggContext): EggPrototype | undefined;
|
|
8
8
|
}
|
package/lib/RootProtoManager.js
CHANGED
|
@@ -7,11 +7,21 @@ class RootProtoManager {
|
|
|
7
7
|
// <method, GetRootProtoCallback[]>
|
|
8
8
|
this.protoMap = new Map();
|
|
9
9
|
}
|
|
10
|
-
registerRootProto(method, cb) {
|
|
11
|
-
|
|
10
|
+
registerRootProto(method, cb, host) {
|
|
11
|
+
host = host || '';
|
|
12
|
+
const cbList = tegg_common_util_1.MapUtil.getOrStore(this.protoMap, method + host, []);
|
|
12
13
|
cbList.push(cb);
|
|
13
14
|
}
|
|
14
15
|
getRootProto(ctx) {
|
|
16
|
+
const hostCbList = this.protoMap.get(ctx.method + ctx.host);
|
|
17
|
+
if (hostCbList) {
|
|
18
|
+
for (const cb of hostCbList) {
|
|
19
|
+
const proto = cb(ctx);
|
|
20
|
+
if (proto) {
|
|
21
|
+
return proto;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
15
25
|
const cbList = this.protoMap.get(ctx.method);
|
|
16
26
|
if (!cbList) {
|
|
17
27
|
return;
|
|
@@ -25,4 +35,4 @@ class RootProtoManager {
|
|
|
25
35
|
}
|
|
26
36
|
}
|
|
27
37
|
exports.RootProtoManager = RootProtoManager;
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm9vdFByb3RvTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlJvb3RQcm90b01hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsOERBQWtEO0FBSWxELE1BQWEsZ0JBQWdCO0lBQTdCO1FBQ0UsbUNBQW1DO1FBQ25DLGFBQVEsR0FBd0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQThCNUQsQ0FBQztJQTVCQyxpQkFBaUIsQ0FBQyxNQUFjLEVBQUUsRUFBd0IsRUFBRSxJQUFZO1FBQ3RFLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sTUFBTSxHQUFHLDBCQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBZTtRQUMxQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxJQUFJLFVBQVUsRUFBRTtZQUNkLEtBQUssTUFBTSxFQUFFLElBQUksVUFBVSxFQUFFO2dCQUMzQixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksS0FBSyxFQUFFO29CQUNULE9BQU8sS0FBSyxDQUFDO2lCQUNkO2FBQ0Y7U0FDRjtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTztTQUNSO1FBQ0QsS0FBSyxNQUFNLEVBQUUsSUFBSSxNQUFNLEVBQUU7WUFDdkIsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLElBQUksS0FBSyxFQUFFO2dCQUNULE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtJQUNILENBQUM7Q0FDRjtBQWhDRCw0Q0FnQ0MifQ==
|
|
@@ -8,6 +8,7 @@ import { RootProtoManager } from '../../RootProtoManager';
|
|
|
8
8
|
export declare class HTTPControllerRegister implements ControllerRegister {
|
|
9
9
|
static instance?: HTTPControllerRegister;
|
|
10
10
|
private readonly router;
|
|
11
|
+
private readonly checkRouters;
|
|
11
12
|
private readonly eggContainerFactory;
|
|
12
13
|
private controllerProtos;
|
|
13
14
|
static create(proto: EggPrototype, controllerMeta: ControllerMetadata, app: Application): HTTPControllerRegister;
|
|
@@ -11,6 +11,8 @@ class HTTPControllerRegister {
|
|
|
11
11
|
constructor(router, eggContainerFactory) {
|
|
12
12
|
this.controllerProtos = [];
|
|
13
13
|
this.router = router;
|
|
14
|
+
this.checkRouters = new Map();
|
|
15
|
+
this.checkRouters.set('default', router);
|
|
14
16
|
this.eggContainerFactory = eggContainerFactory;
|
|
15
17
|
}
|
|
16
18
|
static create(proto, controllerMeta, app) {
|
|
@@ -28,6 +30,7 @@ class HTTPControllerRegister {
|
|
|
28
30
|
static clean() {
|
|
29
31
|
if (this.instance) {
|
|
30
32
|
this.instance.controllerProtos = [];
|
|
33
|
+
this.instance.checkRouters.clear();
|
|
31
34
|
}
|
|
32
35
|
this.instance = undefined;
|
|
33
36
|
}
|
|
@@ -44,10 +47,16 @@ class HTTPControllerRegister {
|
|
|
44
47
|
for (const method of allMethods) {
|
|
45
48
|
const controllerProto = methodMap.get(method);
|
|
46
49
|
const controllerMeta = controllerProto.getMetaData(tegg_1.CONTROLLER_META_DATA);
|
|
47
|
-
const methodRegister = new HTTPMethodRegister_1.HTTPMethodRegister(controllerProto, controllerMeta, method, this.router, this.eggContainerFactory);
|
|
50
|
+
const methodRegister = new HTTPMethodRegister_1.HTTPMethodRegister(controllerProto, controllerMeta, method, this.router, this.checkRouters, this.eggContainerFactory);
|
|
51
|
+
methodRegister.checkDuplicate();
|
|
52
|
+
}
|
|
53
|
+
for (const method of allMethods) {
|
|
54
|
+
const controllerProto = methodMap.get(method);
|
|
55
|
+
const controllerMeta = controllerProto.getMetaData(tegg_1.CONTROLLER_META_DATA);
|
|
56
|
+
const methodRegister = new HTTPMethodRegister_1.HTTPMethodRegister(controllerProto, controllerMeta, method, this.router, this.checkRouters, this.eggContainerFactory);
|
|
48
57
|
methodRegister.register(rootProtoManager);
|
|
49
58
|
}
|
|
50
59
|
}
|
|
51
60
|
}
|
|
52
61
|
exports.HTTPControllerRegister = HTTPControllerRegister;
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFRUUENvbnRyb2xsZXJSZWdpc3Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkhUVFBDb250cm9sbGVyUmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBRzVCLHNDQU1xQjtBQUdyQiw2REFBMEQ7QUFJMUQsTUFBYSxzQkFBc0I7SUFpQmpDLFlBQVksTUFBK0IsRUFBRSxtQkFBK0M7UUFYcEYscUJBQWdCLEdBQW1CLEVBQUUsQ0FBQztRQVk1QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztJQUNqRCxDQUFDO0lBZEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFtQixFQUFFLGNBQWtDLEVBQUUsR0FBZ0I7UUFDckYsSUFBQSxnQkFBTSxFQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUsscUJBQWMsQ0FBQyxJQUFJLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFO1lBQ3BDLHNCQUFzQixDQUFDLFFBQVEsR0FBRyxJQUFJLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDbkc7UUFDRCxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELE9BQU8sc0JBQXNCLENBQUMsUUFBUSxDQUFDO0lBQ3pDLENBQUM7SUFTRCxRQUFRO1FBQ04sWUFBWTtRQUNaLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSztRQUNWLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNwQztRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBQzVCLENBQUM7SUFFRCxVQUFVLENBQUMsZ0JBQWtDO1FBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO1FBQzFELEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsMkJBQW9CLENBQXVCLENBQUM7WUFDL0UsS0FBSyxNQUFNLE1BQU0sSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUNyQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQzthQUM5QjtTQUNGO1FBQ0QsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDNUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0MsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUU7WUFDL0IsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUUsQ0FBQztZQUMvQyxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLDJCQUFvQixDQUF1QixDQUFDO1lBQy9GLE1BQU0sY0FBYyxHQUFHLElBQUksdUNBQWtCLENBQzNDLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUNyRyxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDakM7UUFFRCxLQUFLLE1BQU0sTUFBTSxJQUFJLFVBQVUsRUFBRTtZQUMvQixNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBRSxDQUFDO1lBQy9DLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUMsMkJBQW9CLENBQXVCLENBQUM7WUFDL0YsTUFBTSxjQUFjLEdBQUcsSUFBSSx1Q0FBa0IsQ0FDM0MsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3JHLGNBQWMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7Q0FDRjtBQWhFRCx3REFnRUMifQ==
|
|
@@ -6,11 +6,15 @@ import { EggPrototype } from '@eggjs/tegg-metadata';
|
|
|
6
6
|
import { RootProtoManager } from '../../RootProtoManager';
|
|
7
7
|
export declare class HTTPMethodRegister {
|
|
8
8
|
private readonly router;
|
|
9
|
+
private readonly checkRouters;
|
|
9
10
|
private readonly controllerMeta;
|
|
10
11
|
private readonly methodMeta;
|
|
11
12
|
private readonly proto;
|
|
12
13
|
private readonly eggContainerFactory;
|
|
13
|
-
constructor(proto: EggPrototype, controllerMeta: HTTPControllerMeta, methodMeta: HTTPMethodMeta, router: KoaRouter<any, Context>, eggContainerFactory: typeof EggContainerFactory);
|
|
14
|
+
constructor(proto: EggPrototype, controllerMeta: HTTPControllerMeta, methodMeta: HTTPMethodMeta, router: KoaRouter<any, Context>, checkRouters: Map<string, KoaRouter<any, Context>>, eggContainerFactory: typeof EggContainerFactory);
|
|
14
15
|
private createHandler;
|
|
16
|
+
checkDuplicate(): void;
|
|
17
|
+
private registerToRouter;
|
|
18
|
+
private checkDuplicateInRouter;
|
|
15
19
|
register(rootProtoManager: RootProtoManager): void;
|
|
16
20
|
}
|
|
@@ -11,21 +11,30 @@ const path_to_regexp_1 = __importDefault(require("path-to-regexp"));
|
|
|
11
11
|
const Acl_1 = require("./Acl");
|
|
12
12
|
const errors_1 = require("../../errors");
|
|
13
13
|
const egg_errors_1 = require("egg-errors");
|
|
14
|
+
const router_1 = require("@eggjs/router");
|
|
15
|
+
const noop = () => {
|
|
16
|
+
// ...
|
|
17
|
+
};
|
|
14
18
|
class HTTPMethodRegister {
|
|
15
|
-
constructor(proto, controllerMeta, methodMeta, router, eggContainerFactory) {
|
|
19
|
+
constructor(proto, controllerMeta, methodMeta, router, checkRouters, eggContainerFactory) {
|
|
16
20
|
this.proto = proto;
|
|
17
21
|
this.controllerMeta = controllerMeta;
|
|
18
22
|
this.router = router;
|
|
19
23
|
this.methodMeta = methodMeta;
|
|
24
|
+
this.checkRouters = checkRouters;
|
|
20
25
|
this.eggContainerFactory = eggContainerFactory;
|
|
21
26
|
}
|
|
22
|
-
createHandler(methodMeta) {
|
|
27
|
+
createHandler(methodMeta, host) {
|
|
23
28
|
const argsLength = methodMeta.paramMap.size;
|
|
24
29
|
const hasContext = methodMeta.contextParamIndex !== undefined;
|
|
25
30
|
const contextIndex = methodMeta.contextParamIndex;
|
|
26
31
|
const methodArgsLength = argsLength + (hasContext ? 1 : 0);
|
|
27
32
|
const self = this;
|
|
28
|
-
return async function (ctx) {
|
|
33
|
+
return async function (ctx, next) {
|
|
34
|
+
// if hosts is not empty and host is not matched, not execute
|
|
35
|
+
if (host && host !== ctx.host) {
|
|
36
|
+
return await next();
|
|
37
|
+
}
|
|
29
38
|
// HTTP decorator core implement
|
|
30
39
|
// use controller metadata map http request to function arguments
|
|
31
40
|
const eggObj = self.eggContainerFactory.getEggObject(self.proto, self.proto.name, ctx[egg_module_common_1.TEGG_CONTEXT]);
|
|
@@ -75,24 +84,51 @@ class HTTPMethodRegister {
|
|
|
75
84
|
}
|
|
76
85
|
};
|
|
77
86
|
}
|
|
78
|
-
|
|
79
|
-
// 1. check
|
|
87
|
+
checkDuplicate() {
|
|
88
|
+
// 1. check duplicate with egg controller
|
|
89
|
+
this.checkDuplicateInRouter(this.router);
|
|
90
|
+
// 2. check duplicate with host tegg controller
|
|
91
|
+
let hostRouter;
|
|
92
|
+
const host = this.controllerMeta.getMethodHost(this.methodMeta);
|
|
93
|
+
if (host) {
|
|
94
|
+
hostRouter = this.checkRouters.get(host);
|
|
95
|
+
if (!hostRouter) {
|
|
96
|
+
hostRouter = new router_1.EggRouter({ sensitive: true }, {});
|
|
97
|
+
this.checkRouters.set(host, hostRouter);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (hostRouter) {
|
|
101
|
+
this.checkDuplicateInRouter(hostRouter);
|
|
102
|
+
this.registerToRouter(hostRouter);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
registerToRouter(router) {
|
|
106
|
+
const routerFunc = router[this.methodMeta.method.toLowerCase()];
|
|
80
107
|
const methodRealPath = this.controllerMeta.getMethodRealPath(this.methodMeta);
|
|
81
|
-
const
|
|
108
|
+
const methodName = this.controllerMeta.getMethodName(this.methodMeta);
|
|
109
|
+
Reflect.apply(routerFunc, router, [methodName, methodRealPath, noop]);
|
|
110
|
+
}
|
|
111
|
+
checkDuplicateInRouter(router) {
|
|
112
|
+
const methodRealPath = this.controllerMeta.getMethodRealPath(this.methodMeta);
|
|
113
|
+
const matched = router.match(methodRealPath, this.methodMeta.method);
|
|
82
114
|
const methodName = this.controllerMeta.getMethodName(this.methodMeta);
|
|
83
115
|
if (matched.route) {
|
|
84
116
|
const [layer] = matched.path;
|
|
85
117
|
const err = new errors_1.RouterConflictError(`register http controller ${methodName} failed, ${this.methodMeta.method} ${methodRealPath} is conflict with exists rule ${layer.path}`);
|
|
86
118
|
throw egg_errors_1.FrameworkErrorFormater.format(err);
|
|
87
119
|
}
|
|
88
|
-
|
|
120
|
+
}
|
|
121
|
+
register(rootProtoManager) {
|
|
122
|
+
const methodRealPath = this.controllerMeta.getMethodRealPath(this.methodMeta);
|
|
123
|
+
const methodName = this.controllerMeta.getMethodName(this.methodMeta);
|
|
89
124
|
const routerFunc = this.router[this.methodMeta.method.toLowerCase()];
|
|
90
125
|
const methodMiddlewares = this.controllerMeta.getMethodMiddlewares(this.methodMeta);
|
|
91
126
|
const aclMiddleware = (0, Acl_1.aclMiddlewareFactory)(this.controllerMeta, this.methodMeta);
|
|
92
127
|
if (aclMiddleware) {
|
|
93
128
|
methodMiddlewares.push(aclMiddleware);
|
|
94
129
|
}
|
|
95
|
-
const
|
|
130
|
+
const host = this.controllerMeta.getMethodHost(this.methodMeta);
|
|
131
|
+
const handler = this.createHandler(this.methodMeta, host);
|
|
96
132
|
Reflect.apply(routerFunc, this.router, [methodName, methodRealPath, ...methodMiddlewares, handler]);
|
|
97
133
|
// https://github.com/eggjs/egg-core/blob/0af6178022e7734c4a8b17bb56d592b315207883/lib/egg.js#L279
|
|
98
134
|
const regExp = (0, path_to_regexp_1.default)(methodRealPath, {
|
|
@@ -102,8 +138,8 @@ class HTTPMethodRegister {
|
|
|
102
138
|
if (regExp.test(ctx.path)) {
|
|
103
139
|
return this.proto;
|
|
104
140
|
}
|
|
105
|
-
});
|
|
141
|
+
}, host || '');
|
|
106
142
|
}
|
|
107
143
|
}
|
|
108
144
|
exports.HTTPMethodRegister = HTTPMethodRegister;
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFRUUE1ldGhvZFJlZ2lzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiSFRUUE1ldGhvZFJlZ2lzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUc1QixzQ0FTcUI7QUFHckIsZ0VBQXdEO0FBRXhELG9FQUEwQztBQUMxQywrQkFBNkM7QUFDN0MseUNBQW1EO0FBQ25ELDJDQUFvRDtBQUNwRCwwQ0FBMEM7QUFFMUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO0lBQ2hCLE1BQU07QUFDUixDQUFDLENBQUM7QUFFRixNQUFhLGtCQUFrQjtJQVE3QixZQUNFLEtBQW1CLEVBQ25CLGNBQWtDLEVBQ2xDLFVBQTBCLEVBQzFCLE1BQStCLEVBQy9CLFlBQWtELEVBQ2xELG1CQUErQztRQUUvQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7SUFDakQsQ0FBQztJQUVPLGFBQWEsQ0FBQyxVQUEwQixFQUFFLElBQXdCO1FBQ3hFLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzVDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLENBQUM7UUFDOUQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDO1FBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sSUFBSSxH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
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"tegg"
|
|
8
8
|
]
|
|
9
9
|
},
|
|
10
|
-
"version": "1.
|
|
10
|
+
"version": "1.5.1",
|
|
11
11
|
"description": "controller decorator for egg",
|
|
12
12
|
"keywords": [
|
|
13
13
|
"egg",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@eggjs/egg-module-common": "^1.0.0",
|
|
50
|
-
"@eggjs/tegg": "^1.3.
|
|
50
|
+
"@eggjs/tegg": "^1.3.5",
|
|
51
51
|
"@eggjs/tegg-common-util": "^1.1.1",
|
|
52
52
|
"@eggjs/tegg-loader": "^1.3.0",
|
|
53
53
|
"@eggjs/tegg-metadata": "^1.3.0",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"@eggjs/module-test-util": "^1.3.0",
|
|
62
62
|
"@eggjs/router": "^2.0.0",
|
|
63
63
|
"@eggjs/tegg-config": "^1.1.1",
|
|
64
|
-
"@eggjs/tegg-plugin": "^1.3.
|
|
64
|
+
"@eggjs/tegg-plugin": "^1.3.6",
|
|
65
65
|
"egg": "^2.26.0",
|
|
66
66
|
"egg-mock": "^3.25.1",
|
|
67
67
|
"egg-tracer": "^1.1.0",
|
|
@@ -70,5 +70,5 @@
|
|
|
70
70
|
"publishConfig": {
|
|
71
71
|
"access": "public"
|
|
72
72
|
},
|
|
73
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "e9d2b4019b5fb0395d479475996e2f096a84dc44"
|
|
74
74
|
}
|