koa-ts-core 0.0.3 → 0.0.4
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/README.md +199 -0
- package/package.json +23 -7
package/README.md
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# Koa Application Initialization
|
|
2
|
+
|
|
3
|
+
使用`typescript`开发`koa`, 提供约定式路由、权限校验、加载环境变量
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```shell
|
|
8
|
+
npm i koa-ts-core
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
宿主项目需要安装库
|
|
12
|
+
|
|
13
|
+
```shell
|
|
14
|
+
npm i koa koa-router dotenv
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 初始化
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
import { initializeKoaApp } from "koa-ts-core";
|
|
21
|
+
|
|
22
|
+
const [app] = await initializeKoaApp({
|
|
23
|
+
// 权限校验
|
|
24
|
+
authCheckCallback: () => {
|
|
25
|
+
return Promise.resolve(true);
|
|
26
|
+
},
|
|
27
|
+
// 高优先级中间件注册
|
|
28
|
+
registerHighPriorityMiddleware: (app: Koa) => void,
|
|
29
|
+
// 异常处理
|
|
30
|
+
catchErrorCallback: (error: Error) => void,
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
app.listen();
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 函数说明
|
|
37
|
+
|
|
38
|
+
### `init`
|
|
39
|
+
|
|
40
|
+
- options (TInitOPtions):该参数是一组可选的配置对象,包含以下字段:
|
|
41
|
+
|
|
42
|
+
- koaInstance (Koa):自定义 Koa 实例。如果未提供,将创建一个新的 Koa 实例。
|
|
43
|
+
|
|
44
|
+
- authCheckCallback (AuthRouterCallback):鉴权路由回调函数,用于处理鉴权逻辑。
|
|
45
|
+
|
|
46
|
+
- catchErrorCallback (TErrorCallback):用于捕获错误时的回调函数。
|
|
47
|
+
|
|
48
|
+
- registerHighPriorityMiddleware ((app: Koa) => void)) : 高优先级中间件注册函数,用于注册一些高优先级中间件。
|
|
49
|
+
|
|
50
|
+
## 能力
|
|
51
|
+
|
|
52
|
+
### 约定式路由
|
|
53
|
+
|
|
54
|
+
控制器注册路由,约定在`src/controller`目录下.ts 文件,使用`@Router`和`@AuthRouter`装饰器注册路由
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
--src
|
|
58
|
+
--controller
|
|
59
|
+
--user
|
|
60
|
+
--user.ts
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
# src/controller/api/v1/user.ts
|
|
65
|
+
import { Router, AuthRouter } from "koa-ts-core";
|
|
66
|
+
import { Context } from "koa";
|
|
67
|
+
|
|
68
|
+
class User {
|
|
69
|
+
@Router("get")
|
|
70
|
+
// 注册普通路由
|
|
71
|
+
async userInfo(ctx: Context) {
|
|
72
|
+
ctx.body = {
|
|
73
|
+
success: true,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@AuthRouter("post")
|
|
78
|
+
// 注册权限路由
|
|
79
|
+
async setUserInfo(ctx: Context) {
|
|
80
|
+
ctx.body = {
|
|
81
|
+
success: true,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export default User;
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 权限校验
|
|
90
|
+
|
|
91
|
+
每一个控制器的路由注册方法有一个唯一对应的参数校验器,例如:目录`src/controller/api/v1/user.ts`中`userInfo`方法对应的校验器为`src/validate/api/v1/user.ts`中的静态方法`userInfo`
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
# src/validate/api/v1/user.ts
|
|
95
|
+
|
|
96
|
+
import { Context } from 'koa';
|
|
97
|
+
|
|
98
|
+
class UserValidate {
|
|
99
|
+
static userInfo(ctx: Context) {
|
|
100
|
+
if (!ctx.query.id) {
|
|
101
|
+
throw new Error('id is required');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export default UserValidate;
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 无 Context 请求响应
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
/**
|
|
113
|
+
* 构建成功的请求响应
|
|
114
|
+
* @param options - 成功响应的选项,如数据和消息
|
|
115
|
+
*/
|
|
116
|
+
export declare const successRsp: (options?: Options) => void;
|
|
117
|
+
/**
|
|
118
|
+
* 构建不成功的请求响应,但 HTTP 状态码仍为 200
|
|
119
|
+
* @param options - 包含可能的错误码、消息和数据
|
|
120
|
+
*/
|
|
121
|
+
export declare const unSuccessRsp: (options?: Options) => void;
|
|
122
|
+
/**
|
|
123
|
+
* 构建异常请求响应,HTTP 状态码不为 200
|
|
124
|
+
* @param statusCode - 要返回的 HTTP 状态码
|
|
125
|
+
* @param options - 包含可能的错误信息、数据等
|
|
126
|
+
*/
|
|
127
|
+
export declare const errorRsp: (statusCode: number, options?: Options) => void;
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 异常处理
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
import { BaseException } from "koa-ts-core";
|
|
134
|
+
/**
|
|
135
|
+
* 自定义异常
|
|
136
|
+
*/
|
|
137
|
+
export class CustomException extends BaseException {
|
|
138
|
+
// 自定义异常码
|
|
139
|
+
code = 1000;
|
|
140
|
+
|
|
141
|
+
constructor(message: string) {
|
|
142
|
+
super(message);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
throw new CustomException("自定义异常");
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 加载环境变量
|
|
150
|
+
|
|
151
|
+
使用[dotenv](https://www.npmjs.com/package/dotenv)库对.env 文件进行预加载,约定目录为`env`,支持以下文件约定
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
--env
|
|
155
|
+
--.development.env
|
|
156
|
+
--.production.env
|
|
157
|
+
--.test.env
|
|
158
|
+
--.common.env
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### 根据配置生成文档
|
|
162
|
+
|
|
163
|
+
在项目目录下执行`koa-ts-cli doc`,根据`controller`目录下生成在根目录`doc`目录下的配置文档
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
# 控制器目录 src/controller/test.ts
|
|
167
|
+
import Koa from 'koa';
|
|
168
|
+
import { successRsp, Router, AuthRouter } from 'koa-ts-core';
|
|
169
|
+
|
|
170
|
+
class Test {
|
|
171
|
+
@Router('get')
|
|
172
|
+
async get_test(ctx: Koa.Context) {
|
|
173
|
+
successRsp();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export default Test;
|
|
178
|
+
|
|
179
|
+
# 构建生成的文档 doc/test.ts
|
|
180
|
+
export default class Test {
|
|
181
|
+
static desc = '';
|
|
182
|
+
get_test() {
|
|
183
|
+
return {
|
|
184
|
+
method: 'get',
|
|
185
|
+
description: '',
|
|
186
|
+
path: '/get_test',
|
|
187
|
+
request: {
|
|
188
|
+
header: { 'Content-Type': 'application/json', Authorization: '' },
|
|
189
|
+
body: {},
|
|
190
|
+
query: {}
|
|
191
|
+
},
|
|
192
|
+
response: { body: {} }
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
打开`/doc`路由地址,渲染文档
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koa-ts-core",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "",
|
|
3
|
+
"version": "0.0.4",
|
|
4
|
+
"description": "koa-ts-core",
|
|
5
5
|
"main": "dist/index.cjs.js",
|
|
6
6
|
"module": "dist/index.esm.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -9,25 +9,41 @@
|
|
|
9
9
|
"dist"
|
|
10
10
|
],
|
|
11
11
|
"scripts": {
|
|
12
|
-
"
|
|
13
|
-
"build
|
|
12
|
+
"dev": "npx rollup -c -w",
|
|
13
|
+
"build": "npx rollup -c",
|
|
14
|
+
"link": "npm run build:dev && pnpm link --dir ..",
|
|
15
|
+
"build:dev": "NODE_ENV=development npx rollup -c --bundleConfigAsCjs",
|
|
16
|
+
"publish": "npm run build &&release-it",
|
|
17
|
+
"gen-doc": "npx ts-node src/generate.ts"
|
|
14
18
|
},
|
|
15
|
-
"keywords": [
|
|
19
|
+
"keywords": [
|
|
20
|
+
"koa",
|
|
21
|
+
"koa-ts",
|
|
22
|
+
"node-web"
|
|
23
|
+
],
|
|
16
24
|
"author": "",
|
|
17
25
|
"license": "ISC",
|
|
18
26
|
"dependencies": {
|
|
19
27
|
"dotenv": "^16.4.7",
|
|
20
28
|
"koa": "^2.15.4",
|
|
21
|
-
"koa-router": "^13.0.1"
|
|
29
|
+
"koa-router": "^13.0.1",
|
|
30
|
+
"pug": "^3.0.3",
|
|
31
|
+
"rollup-plugin-pug": "^1.1.1"
|
|
22
32
|
},
|
|
23
33
|
"devDependencies": {
|
|
34
|
+
"@rollup/plugin-commonjs": "^28.0.3",
|
|
35
|
+
"@rollup/plugin-node-resolve": "^16.0.0",
|
|
24
36
|
"@rollup/plugin-terser": "^0.4.4",
|
|
25
37
|
"@rollup/plugin-typescript": "^12.1.2",
|
|
26
38
|
"@types/koa": "^2.15.0",
|
|
27
39
|
"@types/koa-router": "^7.4.8",
|
|
28
40
|
"@types/node": "^22.13.4",
|
|
41
|
+
"@types/pug": "^2.0.10",
|
|
42
|
+
"release-it": "^18.1.2",
|
|
43
|
+
"rollup": "^4.34.9",
|
|
44
|
+
"rollup-plugin-copy": "^3.5.0",
|
|
29
45
|
"rollup-plugin-delete": "^2.1.0",
|
|
30
|
-
"
|
|
46
|
+
"rollup-plugin-dts-alias": "^0.0.4",
|
|
31
47
|
"typescript": "^5.7.3"
|
|
32
48
|
},
|
|
33
49
|
"engines": {
|