badak 1.0.2 → 1.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/.mocharc.json +9 -9
- package/LICENSE +21 -21
- package/README-KR.md +246 -246
- package/README.md +252 -252
- package/build/badak.d.ts +0 -1
- package/build/cjs/badak.js +28 -19
- package/build/cjs/badak.js.map +1 -1
- package/build/cjs/package.json +1 -1
- package/build/esm/badak.js +45 -26
- package/build/esm/badak.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/build/esm/util.js +17 -7
- package/build/esm/util.js.map +1 -1
- package/build/interfaces.d.ts +0 -2
- package/eslint.config.mjs +120 -101
- package/package.json +58 -55
- package/sample/index.ts +34 -34
- package/sample/tsconfig.json +8 -8
- package/scripts/add-js-extensions.ts +59 -59
- package/spec/badak.spec.ts +712 -729
- package/spec/config.spec.ts +701 -707
- package/spec/middleware.spec.ts +391 -413
- package/spec/route.spec.ts +2050 -2134
- package/spec/setSPARoot.spec.ts +259 -259
- package/spec/static/public/index.html +9 -9
- package/spec/static/public/style.css +2 -2
- package/spec/static/test.css +2 -2
- package/spec/static/test.htm +9 -9
- package/spec/static/test.html +9 -9
- package/spec/static/test.json +3 -3
- package/spec/static.spec.ts +384 -386
- package/spec/test-util.ts +41 -37
- package/src/badak.ts +1233 -1220
- package/src/constants.ts +33 -33
- package/src/index.ts +3 -3
- package/src/interfaces.ts +68 -68
- package/src/util.ts +205 -205
- package/tsconfig.cjs.json +8 -8
- package/tsconfig.esm.json +8 -8
- package/tsconfig.json +19 -19
- package/tsconfig.scripts.json +15 -15
- package/tsconfig.types.json +11 -11
- package/CHANGELOG.md +0 -0
package/.mocharc.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
{
|
|
2
|
-
"require": [
|
|
3
|
-
"tsx"
|
|
4
|
-
],
|
|
5
|
-
"spec": [
|
|
6
|
-
"spec/**/*.ts"
|
|
7
|
-
],
|
|
8
|
-
"timeout": 1000
|
|
9
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"require": [
|
|
3
|
+
"tsx"
|
|
4
|
+
],
|
|
5
|
+
"spec": [
|
|
6
|
+
"spec/**/*.ts"
|
|
7
|
+
],
|
|
8
|
+
"timeout": 1000
|
|
9
|
+
}
|
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2017 Janghyun Han
|
|
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) 2017 Janghyun Han
|
|
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-KR.md
CHANGED
|
@@ -1,246 +1,246 @@
|
|
|
1
|
-

|
|
2
|
-
|
|
3
|
-

|
|
4
|
-
|
|
5
|
-
# badak
|
|
6
|
-
|
|
7
|
-
badak은 Promise, TypeScript 기반으로 개발된 백엔드 프레임워크입니다.
|
|
8
|
-
|
|
9
|
-
> badak은 TypeScript로 작성되었으며 JavaScript 코드로 컴파일되어 배포됩니다.
|
|
10
|
-
> 따라서 TypeScript 문법으로 사용할 수도 있고 JavaScript 문법으로 사용할 수도 있습니다.
|
|
11
|
-
|
|
12
|
-
## 설치방법
|
|
13
|
-
|
|
14
|
-
badak은 npm으로 배포되며 npm/yarn 으로 설치할 수 있습니다.
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
npm install badak
|
|
18
|
-
# 또는
|
|
19
|
-
yarn add badak
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## 사용방법
|
|
23
|
-
|
|
24
|
-
```typescript
|
|
25
|
-
import { Badak } from 'badak';
|
|
26
|
-
|
|
27
|
-
const rule: RouteRule = {
|
|
28
|
-
users: {
|
|
29
|
-
GET: () => {
|
|
30
|
-
// 사용자 목록을 반환합니다.
|
|
31
|
-
return {
|
|
32
|
-
list: ['han', 'kim', 'lee']
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
POST: (user: User) => {
|
|
36
|
-
// 사용자를 추가합니다.
|
|
37
|
-
return {
|
|
38
|
-
result: 'ok'
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const app: Badak = new Badak();
|
|
46
|
-
await app.route(routeRule);
|
|
47
|
-
await app.listen(3000);
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## 메서드
|
|
51
|
-
|
|
52
|
-
### `new Badak(option?: Partial<BadakOption>)`
|
|
53
|
-
|
|
54
|
-
badak 인스턴스를 생성합니다. 생성자로 옵션을 전달할 수 있습니다.
|
|
55
|
-
|
|
56
|
-
```typescript
|
|
57
|
-
const app: Badak = new Badak();
|
|
58
|
-
|
|
59
|
-
const appWithLog: Badak = new Badak({
|
|
60
|
-
catchErrorLog: true
|
|
61
|
-
});
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### `auth(fnc: MiddlewareFunction): Promise<void>`
|
|
65
|
-
|
|
66
|
-
인증용 미들웨어 함수를 지정합니다. 인증 함수는 하나만 지정할 수 있습니다.
|
|
67
|
-
인증 미들웨어로 등록된 함수는 `before()` 이후에, 라우팅 함수가 실행되기 전에 실행됩니다.
|
|
68
|
-
인증 미들웨어 함수에서 오류가 발생하면 `401 Unauthorized` 에러가 발생합니다.
|
|
69
|
-
|
|
70
|
-
### `before(fnc: MiddlewareFunction): Promise<void>`
|
|
71
|
-
|
|
72
|
-
라우팅 함수가 실행되기 전에 실행할 미들웨어 함수를 등록합니다.
|
|
73
|
-
미들웨어 함수는 여러개를 지정할 수 있으며, 지정한 순서와 관계없이 병렬로 실행됩니다.
|
|
74
|
-
|
|
75
|
-
### `after(fnc: MiddlewareFunction): Promise<void>`
|
|
76
|
-
|
|
77
|
-
라우팅 함수가 실행된 후에 실행할 미들웨어 함수를 등록합니다.
|
|
78
|
-
미들웨어 함수는 여러개를 지정할 수 있으며, 지정한 순서와 관계없이 병렬로 실행됩니다.
|
|
79
|
-
|
|
80
|
-
### `config(key: string, value: unknown): Promise<void>`
|
|
81
|
-
|
|
82
|
-
badak 앱이 실행되는 동작을 조정합니다.
|
|
83
|
-
|
|
84
|
-
### `listen(port: number): Promise<void>`
|
|
85
|
-
|
|
86
|
-
서버 응답을 시작합니다.
|
|
87
|
-
|
|
88
|
-
### `isRunning(): boolean`
|
|
89
|
-
|
|
90
|
-
서버가 실행중인지 확인하고 결과값을 반환합니다.
|
|
91
|
-
초기 상태는 `false` 이며, `listen()` 함수가 실행된 이후에 `true`가 되고, `stop()`으로 종료한 후에는 `false`가 됩니다.
|
|
92
|
-
|
|
93
|
-
### `getHttpServer(): Server | undefined`
|
|
94
|
-
|
|
95
|
-
HTTP 서버 인스턴스를 반환합니다.
|
|
96
|
-
Badak 내부 멤버에 접근할 때 사용합니다.
|
|
97
|
-
|
|
98
|
-
### `stop(): Promise<void>`
|
|
99
|
-
|
|
100
|
-
HTTP 서버를 정지합니다.
|
|
101
|
-
|
|
102
|
-
### `route(rule: RouteRule): Promise<void>`
|
|
103
|
-
|
|
104
|
-
라우팅 함수를 등록합니다.
|
|
105
|
-
|
|
106
|
-
### `get(address: string, fnc: RouteFunction, option?: RouteOption): Promise<void>`
|
|
107
|
-
|
|
108
|
-
`GET` 메서드 요청에 반응하는 라우팅 함수를 등록합니다.
|
|
109
|
-
|
|
110
|
-
### `post(address: string, fnc: RouteFunction, option?: RouteOption): Promise<void>`
|
|
111
|
-
|
|
112
|
-
`POST` 메서드 요청에 반응하는 라우팅 함수를 등록합니다.
|
|
113
|
-
|
|
114
|
-
### `put(address: string, fnc: RouteFunction, option?: RouteOption): Promise<void>`
|
|
115
|
-
|
|
116
|
-
`PUT` 메서드 요청에 반응하는 라우팅 함수를 등록합니다.
|
|
117
|
-
|
|
118
|
-
### `delete(address: string, fnc: RouteFunction, option?: RouteOption): Promise<void>`
|
|
119
|
-
|
|
120
|
-
`DELETE` 메서드 요청에 반응하는 라우팅 함수를 등록합니다.
|
|
121
|
-
|
|
122
|
-
### `static(uri: string, path: string): Promise<void>`
|
|
123
|
-
|
|
124
|
-
정적 파일로 제공할 주소와 파일 경로를 연결합니다.
|
|
125
|
-
|
|
126
|
-
### `setSPARoot(uri: string, path: string): Promise<void>`
|
|
127
|
-
|
|
128
|
-
SPA 앱으로 사용할 주소와 파일 경로를 연결합니다.
|
|
129
|
-
지정된 폴더 안에 있는 파일은 정적으로 제공되며, 캐싱됩니다.
|
|
130
|
-
|
|
131
|
-
## 인터페이스
|
|
132
|
-
|
|
133
|
-
### `MiddlewareFunction`
|
|
134
|
-
|
|
135
|
-
```typescript
|
|
136
|
-
export type MiddlewareFunction = (req: IncomingMessage, res: ServerResponse, responseBody?: unknown) => void | Promise<void>;
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
`before()`, `after()`에 등록하는 함수입니다.
|
|
140
|
-
미들웨어 함수는 라우팅 함수에 전달되는 인자를 변경할 수 없습니다.
|
|
141
|
-
|
|
142
|
-
### `RouteFunction`
|
|
143
|
-
|
|
144
|
-
```typescript
|
|
145
|
-
export type RouteFunction = (param: any, req: IncomingMessage, res: ServerResponse) => unknown | Promise<unknown>;
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
HTTP 요청에 반응할 라우팅 함수를 등록합니다.
|
|
149
|
-
라우팅 함수가 반환한 값은 HTTP 응답으로 반환됩니다.
|
|
150
|
-
|
|
151
|
-
### `BadakOption`
|
|
152
|
-
|
|
153
|
-
badak 앱의 동작 방식을 지정합니다.
|
|
154
|
-
|
|
155
|
-
#### `catchErrorLog: boolean`
|
|
156
|
-
|
|
157
|
-
에러가 발생하면 콘솔에 로그를 출력합니다.
|
|
158
|
-
|
|
159
|
-
기본값은 `true` 입니다.
|
|
160
|
-
|
|
161
|
-
#### `preventError: boolean`
|
|
162
|
-
|
|
163
|
-
에러가 발생하면 node로 전달합니다.
|
|
164
|
-
`false` 값을 지정하면 에러를 전달하지 않고 무시합니다.
|
|
165
|
-
|
|
166
|
-
기본값은 `true` 입니다.
|
|
167
|
-
|
|
168
|
-
#### `defaultMethod: METHOD | undefined`
|
|
169
|
-
|
|
170
|
-
라우팅에 사용할 기본 HTTP 메서드 타입을 지정합니다.
|
|
171
|
-
이 값을 지정하면 `Badak.route()` 메서드를 사용할 때 HTTP 메서드 지정을 생략할 수 있습니다.
|
|
172
|
-
|
|
173
|
-
- 지정 전 :
|
|
174
|
-
|
|
175
|
-
```typescript
|
|
176
|
-
app.route({
|
|
177
|
-
users: {
|
|
178
|
-
GET: getUserList
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
- `app.config('defaultMethod', 'GET')` 지정 후 :
|
|
184
|
-
|
|
185
|
-
```typescript
|
|
186
|
-
app.route({
|
|
187
|
-
users: getUserList
|
|
188
|
-
});
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
#### `parseNumber: boolean`
|
|
192
|
-
|
|
193
|
-
인자로 전달되는 문자열 형태의 숫자를 `number` 타입으로 변환합니다.
|
|
194
|
-
|
|
195
|
-
기본값은 `false` 입니다.
|
|
196
|
-
|
|
197
|
-
#### `parseDate: boolean`
|
|
198
|
-
|
|
199
|
-
인자로 전달되는 문자열 형태의 날짜를 `Date` 타입으로 변환합니다.
|
|
200
|
-
|
|
201
|
-
기본값은 `false` 입니다.
|
|
202
|
-
|
|
203
|
-
### `RouteOption`
|
|
204
|
-
|
|
205
|
-
라우팅 함수의 동작을 결정합니다.
|
|
206
|
-
|
|
207
|
-
#### `auth: boolean`
|
|
208
|
-
|
|
209
|
-
`false`로 지정하면 이 라우팅 함수가 실행될 때 `auth()` 함수를 실행하지 않습니다.
|
|
210
|
-
|
|
211
|
-
기본값은 `true` 입니다.
|
|
212
|
-
|
|
213
|
-
## 특수 라우팅
|
|
214
|
-
|
|
215
|
-
`route()`나 `get()`, `post()`, `put()`, `delete()` 함수의 경로에 특수 라우팅을 사용할 수 있습니다.
|
|
216
|
-
|
|
217
|
-
### `:` 라우팅
|
|
218
|
-
|
|
219
|
-
`/:userId`로 라우팅 경로를 지정하고 `/user1`로 HTTP 요청을 보내면, 요청이 매칭되며 라우팅 함수의 인자로 `{ userId: 'user1' }`이 전달됩니다.
|
|
220
|
-
|
|
221
|
-
### `?` 라우팅
|
|
222
|
-
|
|
223
|
-
`/users?`로 라우팅 경로를 지정하면 `/user`와 `/users` 경로를 매칭할 수 있습니다.
|
|
224
|
-
|
|
225
|
-
### `+` 라우팅
|
|
226
|
-
|
|
227
|
-
`/user1+`로 라우팅 경로를 지정하면 `/user1`과 `/user11` 등의 경로를 매칭할 수 있습니다.
|
|
228
|
-
|
|
229
|
-
### `*` 라우팅
|
|
230
|
-
|
|
231
|
-
`/user1*`로 라우팅 경로를 지정하면 `/user`와 `/user1`, `/user11` 등의 경로를 매칭할 수 있습니다.
|
|
232
|
-
|
|
233
|
-
## 라우팅 인자
|
|
234
|
-
|
|
235
|
-
### 쿼리 스트링
|
|
236
|
-
|
|
237
|
-
`GET` 메서드를 요청하는 경우 쿼리 스트링 인자를 파싱해서 라우팅 함수로 전달합니다.
|
|
238
|
-
|
|
239
|
-
아래 예제는 모두 `/path` 경로와 매칭되며 전달되는 인자는 각각 이렇습니다.
|
|
240
|
-
|
|
241
|
-
```bash
|
|
242
|
-
/path? # {}
|
|
243
|
-
/path?key # { key: null }
|
|
244
|
-
/path?key= # { key: '' }
|
|
245
|
-
/path?key=value # { key: 'value' }
|
|
246
|
-
```
|
|
1
|
+

|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
# badak
|
|
6
|
+
|
|
7
|
+
badak은 Promise, TypeScript 기반으로 개발된 백엔드 프레임워크입니다.
|
|
8
|
+
|
|
9
|
+
> badak은 TypeScript로 작성되었으며 JavaScript 코드로 컴파일되어 배포됩니다.
|
|
10
|
+
> 따라서 TypeScript 문법으로 사용할 수도 있고 JavaScript 문법으로 사용할 수도 있습니다.
|
|
11
|
+
|
|
12
|
+
## 설치방법
|
|
13
|
+
|
|
14
|
+
badak은 npm으로 배포되며 npm/yarn 으로 설치할 수 있습니다.
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install badak
|
|
18
|
+
# 또는
|
|
19
|
+
yarn add badak
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 사용방법
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import { Badak } from 'badak';
|
|
26
|
+
|
|
27
|
+
const rule: RouteRule = {
|
|
28
|
+
users: {
|
|
29
|
+
GET: () => {
|
|
30
|
+
// 사용자 목록을 반환합니다.
|
|
31
|
+
return {
|
|
32
|
+
list: ['han', 'kim', 'lee']
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
POST: (user: User) => {
|
|
36
|
+
// 사용자를 추가합니다.
|
|
37
|
+
return {
|
|
38
|
+
result: 'ok'
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
const app: Badak = new Badak();
|
|
46
|
+
await app.route(routeRule);
|
|
47
|
+
await app.listen(3000);
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## 메서드
|
|
51
|
+
|
|
52
|
+
### `new Badak(option?: Partial<BadakOption>)`
|
|
53
|
+
|
|
54
|
+
badak 인스턴스를 생성합니다. 생성자로 옵션을 전달할 수 있습니다.
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
const app: Badak = new Badak();
|
|
58
|
+
|
|
59
|
+
const appWithLog: Badak = new Badak({
|
|
60
|
+
catchErrorLog: true
|
|
61
|
+
});
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### `auth(fnc: MiddlewareFunction): Promise<void>`
|
|
65
|
+
|
|
66
|
+
인증용 미들웨어 함수를 지정합니다. 인증 함수는 하나만 지정할 수 있습니다.
|
|
67
|
+
인증 미들웨어로 등록된 함수는 `before()` 이후에, 라우팅 함수가 실행되기 전에 실행됩니다.
|
|
68
|
+
인증 미들웨어 함수에서 오류가 발생하면 `401 Unauthorized` 에러가 발생합니다.
|
|
69
|
+
|
|
70
|
+
### `before(fnc: MiddlewareFunction): Promise<void>`
|
|
71
|
+
|
|
72
|
+
라우팅 함수가 실행되기 전에 실행할 미들웨어 함수를 등록합니다.
|
|
73
|
+
미들웨어 함수는 여러개를 지정할 수 있으며, 지정한 순서와 관계없이 병렬로 실행됩니다.
|
|
74
|
+
|
|
75
|
+
### `after(fnc: MiddlewareFunction): Promise<void>`
|
|
76
|
+
|
|
77
|
+
라우팅 함수가 실행된 후에 실행할 미들웨어 함수를 등록합니다.
|
|
78
|
+
미들웨어 함수는 여러개를 지정할 수 있으며, 지정한 순서와 관계없이 병렬로 실행됩니다.
|
|
79
|
+
|
|
80
|
+
### `config(key: string, value: unknown): Promise<void>`
|
|
81
|
+
|
|
82
|
+
badak 앱이 실행되는 동작을 조정합니다.
|
|
83
|
+
|
|
84
|
+
### `listen(port: number): Promise<void>`
|
|
85
|
+
|
|
86
|
+
서버 응답을 시작합니다.
|
|
87
|
+
|
|
88
|
+
### `isRunning(): boolean`
|
|
89
|
+
|
|
90
|
+
서버가 실행중인지 확인하고 결과값을 반환합니다.
|
|
91
|
+
초기 상태는 `false` 이며, `listen()` 함수가 실행된 이후에 `true`가 되고, `stop()`으로 종료한 후에는 `false`가 됩니다.
|
|
92
|
+
|
|
93
|
+
### `getHttpServer(): Server | undefined`
|
|
94
|
+
|
|
95
|
+
HTTP 서버 인스턴스를 반환합니다.
|
|
96
|
+
Badak 내부 멤버에 접근할 때 사용합니다.
|
|
97
|
+
|
|
98
|
+
### `stop(): Promise<void>`
|
|
99
|
+
|
|
100
|
+
HTTP 서버를 정지합니다.
|
|
101
|
+
|
|
102
|
+
### `route(rule: RouteRule): Promise<void>`
|
|
103
|
+
|
|
104
|
+
라우팅 함수를 등록합니다.
|
|
105
|
+
|
|
106
|
+
### `get(address: string, fnc: RouteFunction, option?: RouteOption): Promise<void>`
|
|
107
|
+
|
|
108
|
+
`GET` 메서드 요청에 반응하는 라우팅 함수를 등록합니다.
|
|
109
|
+
|
|
110
|
+
### `post(address: string, fnc: RouteFunction, option?: RouteOption): Promise<void>`
|
|
111
|
+
|
|
112
|
+
`POST` 메서드 요청에 반응하는 라우팅 함수를 등록합니다.
|
|
113
|
+
|
|
114
|
+
### `put(address: string, fnc: RouteFunction, option?: RouteOption): Promise<void>`
|
|
115
|
+
|
|
116
|
+
`PUT` 메서드 요청에 반응하는 라우팅 함수를 등록합니다.
|
|
117
|
+
|
|
118
|
+
### `delete(address: string, fnc: RouteFunction, option?: RouteOption): Promise<void>`
|
|
119
|
+
|
|
120
|
+
`DELETE` 메서드 요청에 반응하는 라우팅 함수를 등록합니다.
|
|
121
|
+
|
|
122
|
+
### `static(uri: string, path: string): Promise<void>`
|
|
123
|
+
|
|
124
|
+
정적 파일로 제공할 주소와 파일 경로를 연결합니다.
|
|
125
|
+
|
|
126
|
+
### `setSPARoot(uri: string, path: string): Promise<void>`
|
|
127
|
+
|
|
128
|
+
SPA 앱으로 사용할 주소와 파일 경로를 연결합니다.
|
|
129
|
+
지정된 폴더 안에 있는 파일은 정적으로 제공되며, 캐싱됩니다.
|
|
130
|
+
|
|
131
|
+
## 인터페이스
|
|
132
|
+
|
|
133
|
+
### `MiddlewareFunction`
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
export type MiddlewareFunction = (req: IncomingMessage, res: ServerResponse, responseBody?: unknown) => void | Promise<void>;
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
`before()`, `after()`에 등록하는 함수입니다.
|
|
140
|
+
미들웨어 함수는 라우팅 함수에 전달되는 인자를 변경할 수 없습니다.
|
|
141
|
+
|
|
142
|
+
### `RouteFunction`
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
export type RouteFunction = (param: any, req: IncomingMessage, res: ServerResponse) => unknown | Promise<unknown>;
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
HTTP 요청에 반응할 라우팅 함수를 등록합니다.
|
|
149
|
+
라우팅 함수가 반환한 값은 HTTP 응답으로 반환됩니다.
|
|
150
|
+
|
|
151
|
+
### `BadakOption`
|
|
152
|
+
|
|
153
|
+
badak 앱의 동작 방식을 지정합니다.
|
|
154
|
+
|
|
155
|
+
#### `catchErrorLog: boolean`
|
|
156
|
+
|
|
157
|
+
에러가 발생하면 콘솔에 로그를 출력합니다.
|
|
158
|
+
|
|
159
|
+
기본값은 `true` 입니다.
|
|
160
|
+
|
|
161
|
+
#### `preventError: boolean`
|
|
162
|
+
|
|
163
|
+
에러가 발생하면 node로 전달합니다.
|
|
164
|
+
`false` 값을 지정하면 에러를 전달하지 않고 무시합니다.
|
|
165
|
+
|
|
166
|
+
기본값은 `true` 입니다.
|
|
167
|
+
|
|
168
|
+
#### `defaultMethod: METHOD | undefined`
|
|
169
|
+
|
|
170
|
+
라우팅에 사용할 기본 HTTP 메서드 타입을 지정합니다.
|
|
171
|
+
이 값을 지정하면 `Badak.route()` 메서드를 사용할 때 HTTP 메서드 지정을 생략할 수 있습니다.
|
|
172
|
+
|
|
173
|
+
- 지정 전 :
|
|
174
|
+
|
|
175
|
+
```typescript
|
|
176
|
+
app.route({
|
|
177
|
+
users: {
|
|
178
|
+
GET: getUserList
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
- `app.config('defaultMethod', 'GET')` 지정 후 :
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
app.route({
|
|
187
|
+
users: getUserList
|
|
188
|
+
});
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
#### `parseNumber: boolean`
|
|
192
|
+
|
|
193
|
+
인자로 전달되는 문자열 형태의 숫자를 `number` 타입으로 변환합니다.
|
|
194
|
+
|
|
195
|
+
기본값은 `false` 입니다.
|
|
196
|
+
|
|
197
|
+
#### `parseDate: boolean`
|
|
198
|
+
|
|
199
|
+
인자로 전달되는 문자열 형태의 날짜를 `Date` 타입으로 변환합니다.
|
|
200
|
+
|
|
201
|
+
기본값은 `false` 입니다.
|
|
202
|
+
|
|
203
|
+
### `RouteOption`
|
|
204
|
+
|
|
205
|
+
라우팅 함수의 동작을 결정합니다.
|
|
206
|
+
|
|
207
|
+
#### `auth: boolean`
|
|
208
|
+
|
|
209
|
+
`false`로 지정하면 이 라우팅 함수가 실행될 때 `auth()` 함수를 실행하지 않습니다.
|
|
210
|
+
|
|
211
|
+
기본값은 `true` 입니다.
|
|
212
|
+
|
|
213
|
+
## 특수 라우팅
|
|
214
|
+
|
|
215
|
+
`route()`나 `get()`, `post()`, `put()`, `delete()` 함수의 경로에 특수 라우팅을 사용할 수 있습니다.
|
|
216
|
+
|
|
217
|
+
### `:` 라우팅
|
|
218
|
+
|
|
219
|
+
`/:userId`로 라우팅 경로를 지정하고 `/user1`로 HTTP 요청을 보내면, 요청이 매칭되며 라우팅 함수의 인자로 `{ userId: 'user1' }`이 전달됩니다.
|
|
220
|
+
|
|
221
|
+
### `?` 라우팅
|
|
222
|
+
|
|
223
|
+
`/users?`로 라우팅 경로를 지정하면 `/user`와 `/users` 경로를 매칭할 수 있습니다.
|
|
224
|
+
|
|
225
|
+
### `+` 라우팅
|
|
226
|
+
|
|
227
|
+
`/user1+`로 라우팅 경로를 지정하면 `/user1`과 `/user11` 등의 경로를 매칭할 수 있습니다.
|
|
228
|
+
|
|
229
|
+
### `*` 라우팅
|
|
230
|
+
|
|
231
|
+
`/user1*`로 라우팅 경로를 지정하면 `/user`와 `/user1`, `/user11` 등의 경로를 매칭할 수 있습니다.
|
|
232
|
+
|
|
233
|
+
## 라우팅 인자
|
|
234
|
+
|
|
235
|
+
### 쿼리 스트링
|
|
236
|
+
|
|
237
|
+
`GET` 메서드를 요청하는 경우 쿼리 스트링 인자를 파싱해서 라우팅 함수로 전달합니다.
|
|
238
|
+
|
|
239
|
+
아래 예제는 모두 `/path` 경로와 매칭되며 전달되는 인자는 각각 이렇습니다.
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
/path? # {}
|
|
243
|
+
/path?key # { key: null }
|
|
244
|
+
/path?key= # { key: '' }
|
|
245
|
+
/path?key=value # { key: 'value' }
|
|
246
|
+
```
|