@fastcar/koa 0.1.9

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.
Files changed (60) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +110 -0
  3. package/annotation.d.ts +46 -0
  4. package/index.d.ts +63 -0
  5. package/package.json +123 -0
  6. package/src/KoaApplication.ts +139 -0
  7. package/src/annotation/EnableKoa.ts +9 -0
  8. package/src/annotation/KoaMiddleware.ts +19 -0
  9. package/src/annotation/router/AddMapping.ts +31 -0
  10. package/src/annotation/router/AllMapping.ts +12 -0
  11. package/src/annotation/router/DeleteMapping.ts +12 -0
  12. package/src/annotation/router/GetMapping.ts +12 -0
  13. package/src/annotation/router/PatchMapping.ts +12 -0
  14. package/src/annotation/router/PostMapping.ts +12 -0
  15. package/src/annotation/router/PutMapping.ts +12 -0
  16. package/src/annotation/router/RequestMapping.ts +23 -0
  17. package/src/annotation.ts +43 -0
  18. package/src/index.ts +11 -0
  19. package/src/middleware/ExceptionGlobalHandler.ts +28 -0
  20. package/src/middleware/KoaBody.ts +11 -0
  21. package/src/middleware/KoaBodyParser.ts +11 -0
  22. package/src/middleware/KoaCors.ts +38 -0
  23. package/src/middleware/KoaStatic.ts +42 -0
  24. package/src/middleware/Swagger.ts +63 -0
  25. package/src/type/DesignMeta.ts +4 -0
  26. package/src/type/KoaConfig.ts +13 -0
  27. package/src/type/MethodType.ts +8 -0
  28. package/src/type/RouteMethods.ts +8 -0
  29. package/target/KoaApplication.js +139 -0
  30. package/target/annotation/EnableKoa.js +11 -0
  31. package/target/annotation/KoaMiddleware.js +19 -0
  32. package/target/annotation/router/AddMapping.js +29 -0
  33. package/target/annotation/router/AllMapping.js +14 -0
  34. package/target/annotation/router/DeleteMapping.js +14 -0
  35. package/target/annotation/router/GetMapping.js +14 -0
  36. package/target/annotation/router/PatchMapping.js +14 -0
  37. package/target/annotation/router/PostMapping.js +14 -0
  38. package/target/annotation/router/PutMapping.js +14 -0
  39. package/target/annotation/router/RequestMapping.js +22 -0
  40. package/target/annotation.js +38 -0
  41. package/target/index.js +19 -0
  42. package/target/middleware/ExceptionGlobalHandler.js +32 -0
  43. package/target/middleware/KoaBody.js +10 -0
  44. package/target/middleware/KoaBodyParser.js +10 -0
  45. package/target/middleware/KoaCors.js +33 -0
  46. package/target/middleware/KoaStatic.js +38 -0
  47. package/target/middleware/Swagger.js +53 -0
  48. package/target/npmlist.json +1 -0
  49. package/target/type/DesignMeta.js +7 -0
  50. package/target/type/KoaConfig.js +2 -0
  51. package/target/type/MethodType.js +2 -0
  52. package/target/type/RouteMethods.js +12 -0
  53. package/test/logs/koa.log +0 -0
  54. package/test/logs/serverlogger.log +3 -0
  55. package/test/logs/sys.log +70 -0
  56. package/test/resource/application.yml +18 -0
  57. package/test/resource/public/api/index.yaml +37 -0
  58. package/test/resource/public/hello.txt +1 -0
  59. package/test/simple/app.ts +38 -0
  60. package/test/simple/controller/HelloController.ts +37 -0
package/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2021-2022 william_zhong
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,110 @@
1
+ # 基于封装koa的web成型框架
2
+
3
+ ## 快速安装
4
+
5
+ npm install fastcar@koa
6
+
7
+ ## 基本原理
8
+
9
+ * 采用@fastcar/core框架,然后将koa包装成一个基础组件进行调用
10
+ * 加载顺序为优先加载自定义中间件->加载自定义路由->启动http服务进行监听
11
+ * 停止阶段 延迟一秒左右 将server进行关闭
12
+
13
+ ## 如何使用
14
+
15
+ ```ts
16
+ import { FastCarApplication } from "@fastcar/core";
17
+ import { Application } from "@fastcar/core/annotation";
18
+ import { EnableKoa } from "@fastcar/koa/annotation";
19
+
20
+ @Application //注入基础框架
21
+ @EnableKoa //开启koa
22
+ class APP {
23
+ app!: FastCarApplication;
24
+ }
25
+
26
+ export const app = new APP();
27
+ ```
28
+
29
+ ## 添加一个路由访问
30
+
31
+ ```ts
32
+ import { Controller } from "@fastcar/core/annotation";
33
+ import { GET } from "@fastcar/koa/annotation";
34
+
35
+ @Controller
36
+ export default class HelloController {
37
+
38
+ @GET("/")
39
+ home() {
40
+ return "hello world";
41
+ }
42
+ }
43
+ ```
44
+
45
+ ## 如何引用koa中间件
46
+
47
+ ```ts
48
+ //自定义中间件
49
+ //默认会出传入 app: FastCarApplication 可供选择
50
+ function Example(): koa.Middleware {
51
+ return async (ctx: koa.Context, next: Function) => {
52
+ console.log("example--- in");
53
+ await next();
54
+ console.log("example--- out");
55
+ };
56
+ }
57
+
58
+ //在主入口内添加
59
+ import { FastCarApplication } from "@fastcar/core";
60
+ import { Application } from "@fastcar/core/annotation";
61
+ import { EnableKoa } from "@fastcar/koa/annotation";
62
+
63
+ @Application //注入基础框架
64
+ @EnableKoa //开启koa
65
+ @KoaMiddleware(Example)
66
+ class APP {
67
+ app!: FastCarApplication;
68
+ }
69
+
70
+ export const app = new APP();
71
+ ```
72
+
73
+ ## 默认整合的koa中间件(开启方式为@KoaMiddleware(XX))
74
+
75
+ * ExceptionGlobalHandler 用于koa运行时的异常情况捕捉
76
+ * KoaBody 用于文件上传 与 koa-body的用法一致
77
+ * KoaBodyParser 用于请求数据的解析 推荐客户端使用application/json的方式
78
+ * KoaCors 跨域设置(后期可能会用更好的插件替代)
79
+ * KoaStatic 整合了koa-static,koa-range,koa-mount用于静态文件访问,可设置别名
80
+ * Swagger 用于展示api文档使用(后期支持自动化配置说明)
81
+
82
+ ## 注解说明
83
+
84
+ * EnableKoa 作用于应用 开启Koa组件
85
+
86
+ * AllMapping,ALL 作用于controller层 支持GET POST等请求方式访问
87
+
88
+ * GetMapping GET
89
+
90
+ * PostMapping POST
91
+
92
+ * DeleteMapping DELETE
93
+
94
+ * PatchMapping PATCH
95
+
96
+ * PutMapping PUT
97
+
98
+ * RequestMapping REQUEST 作用于头部,用于追加url
99
+
100
+ * KoaMiddleware 作用于应用 用于加载中间件 越在应用上面 优先级越高
101
+
102
+ ## 更多用法
103
+
104
+ 参考项目git地址 @fastcar/koa/test下的simple内
105
+
106
+ ## 项目开源地址
107
+
108
+ * 项目下载 git clone <https://github.com/williamDazhangyu/fast-car.git>
109
+
110
+ * 在线查看 <https://github.com/williamDazhangyu/fast-car>
@@ -0,0 +1,46 @@
1
+ import { MethodType } from "./src/type/MethodType";
2
+
3
+ import * as Koa from "koa";
4
+
5
+ type Ret = (target: any) => void;
6
+
7
+ type MRet = (target: any, name: string, descriptor: PropertyDescriptor) => void;
8
+
9
+ type MiddleWareType = (...args: any) => Koa.Middleware | Koa.Middleware[];
10
+
11
+ //关于请求方式注解
12
+ export function AddMapping(target: any, info: MethodType): void;
13
+
14
+ export function AllMapping(url?: string): MRet;
15
+
16
+ export function DeleteMapping(url?: string): MRet;
17
+
18
+ export function GetMapping(url?: string): MRet;
19
+
20
+ export function PostMapping(url?: string): MRet;
21
+
22
+ export function PatchMapping(url?: string): MRet;
23
+
24
+ export function PutMapping(url?: string): MRet;
25
+
26
+ export function RequestMapping(url: string): Ret;
27
+
28
+ export function ALL(url?: string): MRet;
29
+
30
+ export function DELETE(url?: string): MRet;
31
+
32
+ export function GET(url?: string): MRet;
33
+
34
+ export function POST(url?: string): MRet;
35
+
36
+ export function PATCH(url?: string): MRet;
37
+
38
+ export function PUT(url?: string): MRet;
39
+
40
+ export function REQUEST(url?: string): Ret;
41
+
42
+ //开启koa应用
43
+ export function EnableKoa(target: any): void;
44
+
45
+ //中间件添加拓展
46
+ export function KoaMiddleware(...args: MiddleWareType[]): Ret;
package/index.d.ts ADDED
@@ -0,0 +1,63 @@
1
+ import { FastCarApplication, Logger } from "@fastcar/core";
2
+ import * as Koa from "koa";
3
+ import * as koaBody from "koa-body";
4
+ import * as bodyParser from "koa-bodyparser";
5
+ import { ServerConfig } from "@fastcar/server";
6
+
7
+ type MiddleWareType = (...args: any) => Koa.Middleware | Koa.Middleware[];
8
+
9
+ export class KoaApplication {
10
+ protected app: FastCarApplication;
11
+ protected sysLogger: Logger;
12
+ protected koaApp: Koa;
13
+
14
+ /***
15
+ * @version 1.0 加载中间件
16
+ *
17
+ */
18
+ protected loadMiddleWare(list: Koa.Middleware | Koa.Middleware[]): void;
19
+
20
+ /***
21
+ * @version 1.0 加载路由
22
+ *
23
+ */
24
+ protected loadRoute(): Koa.Middleware;
25
+
26
+ /***
27
+ * @version 1.0 应用启动时加载应用 加载顺序为中间件->路由->开启服务
28
+ */
29
+ start(): void;
30
+
31
+ /***
32
+ * @version 1.0 应用停止时加载 依次关闭http服务器
33
+ */
34
+ stop(): void;
35
+ }
36
+
37
+ export type KoaConfig = {
38
+ server: ServerConfig[] | ServerConfig; //监听的端口号
39
+ koaStatic?: string[]; //相对路径为resource下的 或者绝对文件路径
40
+ koaBodyOptions?: koaBody.IKoaBodyOptions; //文件上传的解析
41
+ koaBodyParser?: bodyParser.Options; //解析请求
42
+ extra?: { [key: string]: any }; //拓展设置
43
+ };
44
+
45
+ //全局异常捕捉 可以用自定义的替换这个函数
46
+ export function ExceptionGlobalHandler(app: FastCarApplication): MiddleWareType;
47
+
48
+ //解析body参数
49
+ export function KoaBody(app: FastCarApplication): MiddleWareType;
50
+
51
+ //解析Body参数 这个更好用
52
+ export function KoaBodyParser(app: FastCarApplication): MiddleWareType;
53
+
54
+ //支持跨域
55
+ export function KoaCors(app: FastCarApplication): MiddleWareType;
56
+
57
+ //解析静态文件
58
+ export function KoaStatic(app: FastCarApplication): MiddleWareType;
59
+
60
+ //支持api说明
61
+ export function Swagger(app: FastCarApplication): MiddleWareType;
62
+
63
+ export * from "./src/type/DesignMeta";
package/package.json ADDED
@@ -0,0 +1,123 @@
1
+ {
2
+ "name": "@fastcar/koa",
3
+ "version": "0.1.9",
4
+ "homepage": "https://github.com/williamDazhangyu/fast-car",
5
+ "description": "fastcar框架下对koa的包装",
6
+ "main": "target/index.js",
7
+ "author": "william_zhong",
8
+ "license": "MIT",
9
+ "types": "index.d.ts",
10
+ "exports": {
11
+ ".": "./target/index.js",
12
+ "./annotation": "./target/annotation.js"
13
+ },
14
+ "files": [
15
+ "src",
16
+ "target",
17
+ "test",
18
+ "index.d.ts",
19
+ "annotation.d.ts",
20
+ "LICENSE"
21
+ ],
22
+ "keywords": [
23
+ "koa",
24
+ "web",
25
+ "node",
26
+ "@fastcar/core",
27
+ "@fastcar/koa"
28
+ ],
29
+ "engines": {
30
+ "node": ">=16"
31
+ },
32
+ "devDependencies": {
33
+ "@fastcar/core": "^0.2.38",
34
+ "@fastcar/server": "^0.0.3",
35
+ "@types/koa": "^2.13.5",
36
+ "reflect-metadata": "^0.1.13"
37
+ },
38
+ "dependencies": {
39
+ "@types/koa-bodyparser": "^4.3.3",
40
+ "@types/koa-mount": "^4.0.1",
41
+ "@types/koa-range": "^0.3.2",
42
+ "@types/koa-router": "^7.4.4",
43
+ "@types/koa-static": "^4.0.2",
44
+ "@types/koa2-cors": "^2.0.2",
45
+ "koa": "2.13.1",
46
+ "koa-body": "^4.2.0",
47
+ "koa-bodyparser": "^4.3.0",
48
+ "koa-mount": "^4.0.0",
49
+ "koa-range": "^0.3.0",
50
+ "koa-router": "^10.1.1",
51
+ "koa-static": "^5.0.0",
52
+ "koa2-cors": "^2.0.6"
53
+ },
54
+ "peerDependencies": {
55
+ "@fastcar/core": "*",
56
+ "@fastcar/server": "*",
57
+ "@types/koa-bodyparser": "^4.3.3",
58
+ "@types/koa-mount": "^4.0.1",
59
+ "@types/koa-range": "^0.3.2",
60
+ "@types/koa-router": "^7.4.4",
61
+ "@types/koa-static": "^4.0.2",
62
+ "@types/koa2-cors": "^2.0.2",
63
+ "koa-body": "^4.2.0",
64
+ "koa-bodyparser": "^4.3.0",
65
+ "koa-mount": "^4.0.0",
66
+ "koa-range": "^0.3.0",
67
+ "koa-router": "^10.1.1",
68
+ "koa-static": "^5.0.0",
69
+ "koa2-cors": "^2.0.6",
70
+ "swagger-ui-dist": "4.5.0"
71
+ },
72
+ "peerDependenciesMeta": {
73
+ "@types/koa-bodyparser": {
74
+ "optional": true
75
+ },
76
+ "@types/koa-mount": {
77
+ "optional": true
78
+ },
79
+ "@types/koa-range": {
80
+ "optional": true
81
+ },
82
+ "@types/koa-router": {
83
+ "optional": true
84
+ },
85
+ "@types/koa-static": {
86
+ "optional": true
87
+ },
88
+ "@types/koa2-cors": {
89
+ "optional": true
90
+ },
91
+ "koa-body": {
92
+ "optional": true
93
+ },
94
+ "koa-bodyparser": {
95
+ "optional": true
96
+ },
97
+ "koa-mount": {
98
+ "optional": true
99
+ },
100
+ "koa-range": {
101
+ "optional": true
102
+ },
103
+ "koa-router": {
104
+ "optional": true
105
+ },
106
+ "koa-static": {
107
+ "optional": true
108
+ },
109
+ "koa2-cors": {
110
+ "optional": true
111
+ },
112
+ "swagger-ui-dist": {
113
+ "optional": true
114
+ }
115
+ },
116
+ "repository": {
117
+ "type": "git",
118
+ "url": "https://github.com/williamDazhangyu/fast-car.git"
119
+ },
120
+ "scripts": {
121
+ "build": "tsc"
122
+ }
123
+ }
@@ -0,0 +1,139 @@
1
+ import "reflect-metadata";
2
+ import { ApplicationStart, ApplicationStop, Autowired, Log } from "@fastcar/core/annotation";
3
+ import { FastCarApplication, BootPriority, ComponentKind, Logger } from "@fastcar/core";
4
+ import * as Koa from "koa";
5
+ import * as KoaRouter from "koa-router";
6
+ import { MethodType } from "./type/MethodType";
7
+ import { DesignMeta } from "./type/DesignMeta";
8
+ import { TypeUtil } from "@fastcar/core/utils";
9
+ import { KoaConfig } from "./type/KoaConfig";
10
+ import { ServerApplication } from "@fastcar/server";
11
+
12
+ /***
13
+ * @version 1.0 koa基础组件启动
14
+ *
15
+ */
16
+ @ApplicationStart(BootPriority.Lowest, "start")
17
+ @ApplicationStop(BootPriority.Base, "stop")
18
+ export default class KoaApplication {
19
+ @Autowired
20
+ protected app!: FastCarApplication;
21
+
22
+ @Log("koa")
23
+ protected koaLogger!: Logger;
24
+
25
+ protected koaApp: Koa;
26
+
27
+ @Autowired
28
+ private serverApplication!: ServerApplication;
29
+
30
+ constructor() {
31
+ this.koaApp = new Koa();
32
+ }
33
+
34
+ /***
35
+ * @version 1.0 加载中间件
36
+ *
37
+ */
38
+ protected loadMiddleWare(list: Koa.Middleware | Koa.Middleware[]): void {
39
+ if (Array.isArray(list)) {
40
+ list.forEach((item) => {
41
+ if (TypeUtil.isFunction(item)) {
42
+ this.koaApp.use(item);
43
+ }
44
+ });
45
+ } else {
46
+ if (TypeUtil.isFunction(list)) {
47
+ this.koaApp.use(list);
48
+ }
49
+ }
50
+ }
51
+
52
+ /***
53
+ * @version 1.0 加载路由
54
+ *
55
+ */
56
+ protected loadRoute(): Koa.Middleware {
57
+ let router: any = new KoaRouter();
58
+
59
+ let instanceList = this.app.getComponentByType(ComponentKind.Controller);
60
+
61
+ //查找绑定的url
62
+ instanceList.forEach((instance) => {
63
+ let routerMap: Map<string, MethodType> = Reflect.getMetadata(DesignMeta.ROUTER_MAP, instance);
64
+ //移除空的map结构
65
+ if (!routerMap || routerMap.size == 0) {
66
+ return;
67
+ }
68
+ routerMap.forEach((item) => {
69
+ //去除ctx的影响
70
+ let callBack = async (ctx: any, next?: Function) => {
71
+ //进行参数的取值
72
+ let body = Object.keys(ctx.query).length > 0 ? ctx.query : ctx.request.body;
73
+
74
+ if (!body) {
75
+ body = {};
76
+ }
77
+
78
+ if (!!ctx.params) {
79
+ Object.assign(body, ctx.params);
80
+ }
81
+
82
+ let res = await instance[item.method](body, ctx);
83
+ if (!!res) {
84
+ ctx.body = res;
85
+ }
86
+
87
+ if (next) {
88
+ await next();
89
+ }
90
+ };
91
+
92
+ for (let r of item.request) {
93
+ //进行绑定 加载router路由的执行方法
94
+ Reflect.apply(router[`${r}`], router, [item.url, callBack]);
95
+ }
96
+ });
97
+ });
98
+
99
+ return router.routes();
100
+ }
101
+
102
+ start(): void {
103
+ const koaApp = this.koaApp;
104
+
105
+ //加载中间件
106
+ let middlewareList: Function[] = this.app.getSetting(DesignMeta.KoaMIDDLEWARE);
107
+ if (Array.isArray(middlewareList)) {
108
+ for (let m of middlewareList) {
109
+ if (TypeUtil.isPromise(m)) {
110
+ Reflect.apply(m, this, [this.app, koaApp]).then((tmpList: Koa.Middleware | Koa.Middleware[]) => {
111
+ this.loadMiddleWare(tmpList);
112
+ });
113
+ } else {
114
+ let tmpList: Koa.Middleware | Koa.Middleware[] = Reflect.apply(m, this, [this.app, koaApp]);
115
+ this.loadMiddleWare(tmpList);
116
+ }
117
+ }
118
+ }
119
+
120
+ //加载路由
121
+ koaApp.use(this.loadRoute());
122
+
123
+ //读取配置文件 创建服务器
124
+ let appCallback = koaApp.callback();
125
+ let koaConfig: KoaConfig = this.app.getSetting("koa");
126
+
127
+ if (!!koaConfig.server) {
128
+ if (Array.isArray(koaConfig.server)) {
129
+ koaConfig.server.forEach((server) => {
130
+ this.serverApplication.createServer(server, appCallback);
131
+ });
132
+ } else {
133
+ this.serverApplication.createServer(koaConfig.server, appCallback);
134
+ }
135
+ }
136
+ }
137
+
138
+ async stop(): Promise<void> {}
139
+ }
@@ -0,0 +1,9 @@
1
+ import { ComponentInjection } from "@fastcar/core/annotation";
2
+ import { EnableServer } from "@fastcar/server";
3
+
4
+ //开启koa应用
5
+ export default function EnableKoa(target: any) {
6
+ let fp = require.resolve("../KoaApplication");
7
+ ComponentInjection(target, fp);
8
+ EnableServer(target);
9
+ }
@@ -0,0 +1,19 @@
1
+ import "reflect-metadata";
2
+ import { DesignMeta } from "../type/DesignMeta";
3
+ import * as Koa from "koa";
4
+
5
+ type MiddleWareType = (...args: any) => Koa.Middleware | Koa.Middleware[];
6
+
7
+ //加载koa中间件
8
+ export default function KoaMiddleware(...args: MiddleWareType[]) {
9
+ return function(target: any) {
10
+ let middlewareList: MiddleWareType[] = Reflect.get(target.prototype, DesignMeta.KoaMIDDLEWARE);
11
+ if (!middlewareList) {
12
+ middlewareList = args;
13
+ } else {
14
+ //由于注解方式是从下至上运行 和我们理解的书写习惯不一样,所以这边做了一个反序
15
+ middlewareList = [...args, ...middlewareList];
16
+ }
17
+ Reflect.set(target.prototype, DesignMeta.KoaMIDDLEWARE, middlewareList);
18
+ };
19
+ }
@@ -0,0 +1,31 @@
1
+ import "reflect-metadata";
2
+ import { MethodType } from "../../type/MethodType";
3
+ import { DesignMeta } from "../../type/DesignMeta";
4
+
5
+ export default function AddMapping(target: any, info: MethodType) {
6
+
7
+ if(!info.url) {
8
+ info.url = info.method;
9
+ }
10
+
11
+ //格式化url 以/开头
12
+ if (!info.url.startsWith("/")) {
13
+ info.url = "/" + info.url;
14
+ }
15
+
16
+ let routerMap: Map<string, MethodType> = Reflect.getMetadata(DesignMeta.ROUTER_MAP, target);
17
+ if (!routerMap) {
18
+ routerMap = new Map();
19
+ Reflect.defineMetadata(DesignMeta.ROUTER_MAP, routerMap, target);
20
+ }
21
+
22
+ let curr = routerMap.get(info.url);
23
+ if (!curr) {
24
+ routerMap.set(info.url, info);
25
+ } else {
26
+ if (info.url != curr.url) {
27
+ console.warn(`The two URL names are inconsisten in (${info.url},${curr.url})`);
28
+ }
29
+ curr.request = [...info.request, ...curr.request];
30
+ }
31
+ }
@@ -0,0 +1,12 @@
1
+ import { RouteMethods } from "../../type/RouteMethods";
2
+ import AddMapping from "./AddMapping";
3
+
4
+ export default function AllMapping(url?: string) {
5
+ return function(target: any, name: string, descriptor: PropertyDescriptor) {
6
+ AddMapping(target, {
7
+ url,
8
+ method: name,
9
+ request: [RouteMethods.AllMapping],
10
+ });
11
+ };
12
+ }
@@ -0,0 +1,12 @@
1
+ import { RouteMethods } from "../../type/RouteMethods";
2
+ import AddMapping from "./AddMapping";
3
+
4
+ export default function DeleteMapping(url?: string) {
5
+ return function(target: any, name: string, descriptor: PropertyDescriptor) {
6
+ AddMapping(target, {
7
+ url,
8
+ method: name,
9
+ request: [RouteMethods.DeleteMapping],
10
+ });
11
+ };
12
+ }
@@ -0,0 +1,12 @@
1
+ import { RouteMethods } from "../../type/RouteMethods";
2
+ import AddMapping from "./AddMapping";
3
+
4
+ export default function GetMapping(url?: string) {
5
+ return function(target: any, name: string, descriptor: PropertyDescriptor) {
6
+ AddMapping(target, {
7
+ url,
8
+ method: name,
9
+ request: [RouteMethods.GetMapping],
10
+ });
11
+ };
12
+ }
@@ -0,0 +1,12 @@
1
+ import { RouteMethods } from "../../type/RouteMethods";
2
+ import AddMapping from "./AddMapping";
3
+
4
+ export default function PatchMapping(url?: string) {
5
+ return function(target: any, name: string, descriptor: PropertyDescriptor) {
6
+ AddMapping(target, {
7
+ url,
8
+ method: name,
9
+ request: [RouteMethods.PatchMapping],
10
+ });
11
+ };
12
+ }
@@ -0,0 +1,12 @@
1
+ import { RouteMethods } from "../../type/RouteMethods";
2
+ import AddMapping from "./AddMapping";
3
+
4
+ export default function PostMapping(url?: string) {
5
+ return function(target: any, name: string, descriptor: PropertyDescriptor) {
6
+ AddMapping(target, {
7
+ url,
8
+ method: name,
9
+ request: [RouteMethods.PostMapping],
10
+ });
11
+ };
12
+ }
@@ -0,0 +1,12 @@
1
+ import { RouteMethods } from "../../type/RouteMethods";
2
+ import AddMapping from "./AddMapping";
3
+
4
+ export default function PutMapping(url?: string) {
5
+ return function(target: any, name: string, descriptor: PropertyDescriptor) {
6
+ AddMapping(target, {
7
+ url,
8
+ method: name,
9
+ request: [RouteMethods.PutMapping],
10
+ });
11
+ };
12
+ }
@@ -0,0 +1,23 @@
1
+ import "reflect-metadata";
2
+ import { MethodType } from "../../type/MethodType";
3
+ import { DesignMeta } from "../../type/DesignMeta";
4
+ import { FormatStr } from "@fastcar/core/utils";
5
+
6
+ //加载值头部的url
7
+ export default function RequestMapping(url?: string) {
8
+ return function (target: any) {
9
+ let tname = FormatStr.formatFirstToLow(target.name);
10
+ let headUrl = url || tname;
11
+
12
+ if (!headUrl.startsWith("/")) {
13
+ headUrl = "/" + headUrl;
14
+ }
15
+
16
+ let routerMap: Map<string, MethodType> = Reflect.getMetadata(DesignMeta.ROUTER_MAP, target.prototype);
17
+ if (!!routerMap) {
18
+ routerMap.forEach((item) => {
19
+ item.url = headUrl + item.url;
20
+ });
21
+ }
22
+ };
23
+ }