@e22m4u/ts-rest-router 0.1.2 → 0.2.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/README.md +171 -74
- package/dist/cjs/index.cjs +352 -362
- package/dist/esm/controller-registry.js +37 -32
- package/dist/esm/debuggable-service.d.ts +10 -1
- package/dist/esm/debuggable-service.js +14 -3
- package/dist/esm/decorators/after-action/after-action-decorator.d.ts +9 -0
- package/dist/esm/decorators/{before/before-decorator.js → after-action/after-action-decorator.js} +7 -7
- package/dist/esm/decorators/{before/before-decorator.spec.js → after-action/after-action-decorator.spec.js} +19 -19
- package/dist/esm/decorators/{after/after-metadata.d.ts → after-action/after-action-metadata.d.ts} +4 -4
- package/dist/esm/decorators/after-action/after-action-metadata.js +5 -0
- package/dist/esm/decorators/{after/after-reflector.d.ts → after-action/after-action-reflector.d.ts} +5 -5
- package/dist/esm/decorators/{after/after-reflector.js → after-action/after-action-reflector.js} +6 -6
- package/dist/esm/decorators/{before/before-reflector.spec.js → after-action/after-action-reflector.spec.js} +23 -24
- package/dist/esm/decorators/after-action/index.d.ts +3 -0
- package/dist/esm/decorators/after-action/index.js +3 -0
- package/dist/esm/decorators/before-action/before-action-decorator.d.ts +9 -0
- package/dist/esm/decorators/{after/after-decorator.js → before-action/before-action-decorator.js} +7 -7
- package/dist/esm/decorators/{after/after-decorator.spec.js → before-action/before-action-decorator.spec.js} +19 -19
- package/dist/esm/decorators/{before/before-metadata.d.ts → before-action/before-action-metadata.d.ts} +4 -4
- package/dist/esm/decorators/before-action/before-action-metadata.js +5 -0
- package/dist/esm/decorators/{before/before-reflector.d.ts → before-action/before-action-reflector.d.ts} +5 -5
- package/dist/esm/decorators/{before/before-reflector.js → before-action/before-action-reflector.js} +6 -6
- package/dist/esm/decorators/{after/after-reflector.spec.js → before-action/before-action-reflector.spec.js} +23 -24
- package/dist/esm/decorators/before-action/index.d.ts +3 -0
- package/dist/esm/decorators/before-action/index.js +3 -0
- package/dist/esm/decorators/index.d.ts +4 -4
- package/dist/esm/decorators/index.js +4 -4
- package/dist/esm/decorators/request-context/request-context-decorator.d.ts +4 -4
- package/dist/esm/decorators/request-context/request-context-decorator.js +4 -4
- package/dist/esm/decorators/request-context/request-context-decorator.spec.js +6 -0
- package/dist/esm/decorators/request-context/request-context-reflector.spec.js +0 -1
- package/dist/esm/decorators/request-data/request-data-decorator.d.ts +10 -10
- package/dist/esm/decorators/request-data/request-data-decorator.js +10 -10
- package/dist/esm/decorators/request-data/request-data-decorator.spec.js +44 -32
- package/dist/esm/decorators/request-data/request-data-metadata.d.ts +1 -1
- package/dist/esm/decorators/request-data/request-data-reflector.spec.js +0 -1
- package/dist/esm/decorators/rest-action/index.d.ts +3 -0
- package/dist/esm/decorators/rest-action/index.js +3 -0
- package/dist/esm/decorators/rest-action/rest-action-decorator.d.ts +57 -0
- package/dist/esm/decorators/rest-action/rest-action-decorator.js +52 -0
- package/dist/esm/decorators/rest-action/rest-action-decorator.spec.js +401 -0
- package/dist/esm/decorators/{action/action-metadata.d.ts → rest-action/rest-action-metadata.d.ts} +6 -6
- package/dist/esm/decorators/rest-action/rest-action-metadata.js +5 -0
- package/dist/esm/decorators/rest-action/rest-action-reflector.d.ts +22 -0
- package/dist/esm/decorators/{action/action-reflector.js → rest-action/rest-action-reflector.js} +6 -6
- package/dist/esm/decorators/{action/action-reflector.spec.js → rest-action/rest-action-reflector.spec.js} +13 -14
- package/dist/esm/decorators/rest-controller/index.d.ts +3 -0
- package/dist/esm/decorators/rest-controller/index.js +3 -0
- package/dist/esm/decorators/rest-controller/rest-controller-decorator.d.ts +14 -0
- package/dist/esm/decorators/{controller/controller-decorator.js → rest-controller/rest-controller-decorator.js} +5 -5
- package/dist/esm/decorators/{controller/controller-decorator.spec.js → rest-controller/rest-controller-decorator.spec.js} +15 -15
- package/dist/esm/decorators/{controller/controller-metadata.d.ts → rest-controller/rest-controller-metadata.d.ts} +5 -5
- package/dist/esm/decorators/rest-controller/rest-controller-metadata.js +5 -0
- package/dist/esm/decorators/rest-controller/rest-controller-reflector.d.ts +20 -0
- package/dist/esm/decorators/rest-controller/rest-controller-reflector.js +24 -0
- package/dist/esm/decorators/{controller/controller-reflector.spec.js → rest-controller/rest-controller-reflector.spec.js} +12 -13
- package/dist/esm/errors/not-a-controller-error.js +1 -1
- package/dist/esm/types.d.ts +0 -10
- package/dist/esm/utils/index.d.ts +0 -1
- package/dist/esm/utils/index.js +0 -1
- package/eslint.config.js +1 -1
- package/package.json +15 -15
- package/src/controller-registry.spec.ts +192 -134
- package/src/controller-registry.ts +46 -39
- package/src/debuggable-service.spec.ts +0 -1
- package/src/debuggable-service.ts +17 -4
- package/src/decorators/{before/before-decorator.spec.ts → after-action/after-action-decorator.spec.ts} +19 -19
- package/src/decorators/{before/before-decorator.ts → after-action/after-action-decorator.ts} +9 -9
- package/src/decorators/{after/after-metadata.ts → after-action/after-action-metadata.ts} +5 -5
- package/src/decorators/{before/before-reflector.spec.ts → after-action/after-action-reflector.spec.ts} +33 -24
- package/src/decorators/{before/before-reflector.ts → after-action/after-action-reflector.ts} +13 -9
- package/src/decorators/after-action/index.ts +3 -0
- package/src/decorators/{after/after-decorator.spec.ts → before-action/before-action-decorator.spec.ts} +19 -19
- package/src/decorators/{after/after-decorator.ts → before-action/before-action-decorator.ts} +9 -9
- package/src/decorators/before-action/before-action-metadata.ts +17 -0
- package/src/decorators/{after/after-reflector.spec.ts → before-action/before-action-reflector.spec.ts} +40 -24
- package/src/decorators/{after/after-reflector.ts → before-action/before-action-reflector.ts} +18 -9
- package/src/decorators/before-action/index.ts +3 -0
- package/src/decorators/index.ts +4 -4
- package/src/decorators/request-context/request-context-decorator.spec.ts +7 -0
- package/src/decorators/request-context/request-context-decorator.ts +4 -4
- package/src/decorators/request-context/request-context-reflector.spec.ts +0 -1
- package/src/decorators/request-data/request-data-decorator.spec.ts +45 -32
- package/src/decorators/request-data/request-data-decorator.ts +10 -10
- package/src/decorators/request-data/request-data-metadata.ts +1 -1
- package/src/decorators/request-data/request-data-reflector.spec.ts +0 -1
- package/src/decorators/rest-action/index.ts +3 -0
- package/src/decorators/rest-action/rest-action-decorator.spec.ts +325 -0
- package/src/decorators/rest-action/rest-action-decorator.ts +166 -0
- package/src/decorators/{action/action-metadata.ts → rest-action/rest-action-metadata.ts} +7 -7
- package/src/decorators/{action/action-reflector.spec.ts → rest-action/rest-action-reflector.spec.ts} +13 -14
- package/src/decorators/rest-action/rest-action-reflector.ts +41 -0
- package/src/decorators/rest-controller/index.ts +3 -0
- package/src/decorators/{controller/controller-decorator.spec.ts → rest-controller/rest-controller-decorator.spec.ts} +16 -16
- package/src/decorators/{controller/controller-decorator.ts → rest-controller/rest-controller-decorator.ts} +14 -10
- package/src/decorators/{controller/controller-metadata.ts → rest-controller/rest-controller-metadata.ts} +6 -7
- package/src/decorators/{controller/controller-reflector.spec.ts → rest-controller/rest-controller-reflector.spec.ts} +21 -13
- package/src/decorators/rest-controller/rest-controller-reflector.ts +32 -0
- package/src/errors/not-a-controller-error.ts +4 -1
- package/src/types.ts +0 -10
- package/src/utils/index.ts +0 -1
- package/dist/esm/decorators/action/action-decorator.d.ts +0 -52
- package/dist/esm/decorators/action/action-decorator.js +0 -62
- package/dist/esm/decorators/action/action-decorator.spec.js +0 -59
- package/dist/esm/decorators/action/action-metadata.js +0 -5
- package/dist/esm/decorators/action/action-reflector.d.ts +0 -22
- package/dist/esm/decorators/action/index.d.ts +0 -3
- package/dist/esm/decorators/action/index.js +0 -3
- package/dist/esm/decorators/after/after-decorator.d.ts +0 -9
- package/dist/esm/decorators/after/after-metadata.js +0 -5
- package/dist/esm/decorators/after/index.d.ts +0 -3
- package/dist/esm/decorators/after/index.js +0 -3
- package/dist/esm/decorators/before/before-decorator.d.ts +0 -9
- package/dist/esm/decorators/before/before-metadata.js +0 -5
- package/dist/esm/decorators/before/index.d.ts +0 -3
- package/dist/esm/decorators/before/index.js +0 -3
- package/dist/esm/decorators/controller/controller-decorator.d.ts +0 -14
- package/dist/esm/decorators/controller/controller-metadata.js +0 -5
- package/dist/esm/decorators/controller/controller-reflector.d.ts +0 -20
- package/dist/esm/decorators/controller/controller-reflector.js +0 -24
- package/dist/esm/decorators/controller/index.d.ts +0 -3
- package/dist/esm/decorators/controller/index.js +0 -3
- package/dist/esm/utils/create-debugger.d.ts +0 -44
- package/dist/esm/utils/create-debugger.js +0 -81
- package/dist/esm/utils/create-debugger.spec.d.ts +0 -1
- package/dist/esm/utils/create-debugger.spec.js +0 -8
- package/src/decorators/action/action-decorator.spec.ts +0 -42
- package/src/decorators/action/action-decorator.ts +0 -98
- package/src/decorators/action/action-reflector.ts +0 -38
- package/src/decorators/action/index.ts +0 -3
- package/src/decorators/after/index.ts +0 -3
- package/src/decorators/before/before-metadata.ts +0 -17
- package/src/decorators/before/index.ts +0 -3
- package/src/decorators/controller/controller-reflector.ts +0 -28
- package/src/decorators/controller/index.ts +0 -3
- package/src/utils/create-debugger.spec.ts +0 -9
- package/src/utils/create-debugger.ts +0 -98
- /package/dist/esm/decorators/{action/action-decorator.spec.d.ts → after-action/after-action-decorator.spec.d.ts} +0 -0
- /package/dist/esm/decorators/{action/action-reflector.spec.d.ts → after-action/after-action-reflector.spec.d.ts} +0 -0
- /package/dist/esm/decorators/{after/after-decorator.spec.d.ts → before-action/before-action-decorator.spec.d.ts} +0 -0
- /package/dist/esm/decorators/{after/after-reflector.spec.d.ts → before-action/before-action-reflector.spec.d.ts} +0 -0
- /package/dist/esm/decorators/{before/before-decorator.spec.d.ts → rest-action/rest-action-decorator.spec.d.ts} +0 -0
- /package/dist/esm/decorators/{before/before-reflector.spec.d.ts → rest-action/rest-action-reflector.spec.d.ts} +0 -0
- /package/dist/esm/decorators/{controller/controller-decorator.spec.d.ts → rest-controller/rest-controller-decorator.spec.d.ts} +0 -0
- /package/dist/esm/decorators/{controller/controller-reflector.spec.d.ts → rest-controller/rest-controller-reflector.spec.d.ts} +0 -0
package/README.md
CHANGED
@@ -8,7 +8,17 @@ REST маршрутизатор на основе контроллеров дл
|
|
8
8
|
- Типизированные параметры запросов (body, query, params).
|
9
9
|
- Поддержка middleware до и после обработки запроса.
|
10
10
|
- Валидация входящих данных.
|
11
|
-
- Поддержка всех HTTP методов (GET, POST, PUT,
|
11
|
+
- Поддержка всех HTTP методов (GET, POST, PUT, PATCH и DELETE).
|
12
|
+
|
13
|
+
## Содержание
|
14
|
+
|
15
|
+
- [Установка](#установка)
|
16
|
+
- [Поддержка декораторов](#поддержка-декораторов)
|
17
|
+
- [Базовый пример](#базовый-пример)
|
18
|
+
- [Валидация](#валидация)
|
19
|
+
- [Декораторы](#декораторы)
|
20
|
+
- [Отладка](#отладка)
|
21
|
+
- [Тесты](#тесты)
|
12
22
|
|
13
23
|
## Установка
|
14
24
|
|
@@ -28,48 +38,49 @@ npm install @e22m4u/ts-rest-router
|
|
28
38
|
}
|
29
39
|
```
|
30
40
|
|
31
|
-
##
|
41
|
+
## Базовый пример
|
32
42
|
|
33
|
-
Создание контроллера и
|
43
|
+
Создание контроллера и методов.
|
34
44
|
|
35
45
|
```ts
|
36
|
-
import {get} from '@e22m4u/ts-rest-router';
|
37
|
-
import {post} from '@e22m4u/ts-rest-router';
|
38
|
-
import {field} from '@e22m4u/ts-rest-router';
|
39
46
|
import {DataType} from '@e22m4u/ts-rest-router';
|
40
|
-
import {
|
41
|
-
|
42
|
-
@
|
43
|
-
|
44
|
-
|
47
|
+
import {getAction} from '@e22m4u/ts-rest-router';
|
48
|
+
import {postAction} from '@e22m4u/ts-rest-router';
|
49
|
+
import {requestField} from '@e22m4u/ts-rest-router';
|
50
|
+
import {restController} from '@e22m4u/ts-rest-router';
|
51
|
+
|
52
|
+
// объявление контроллера
|
53
|
+
// и базового пути /users
|
54
|
+
@restController('users')
|
55
|
+
class UserController {
|
56
|
+
// объявление метода POST /users/login
|
57
|
+
// (использует базовый путь контроллера)
|
58
|
+
@postAction('login')
|
45
59
|
async login(
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
username: string,
|
51
|
-
@field('password', { // поле "password" в теле запроса
|
52
|
-
type: DataType.STRING, // тип параметра допускает только строки
|
53
|
-
required: true, // параметр является обязательным
|
54
|
-
})
|
55
|
-
password: string,
|
60
|
+
// инъекция значений указанных полей
|
61
|
+
// извлеизвлекаемых из тела запроса
|
62
|
+
@requestField('username') username?: string,
|
63
|
+
@requestField('password') password?: string,
|
56
64
|
) {
|
57
|
-
|
58
|
-
|
59
|
-
|
65
|
+
// так как метод возвращает объект,
|
66
|
+
// результат будет представлен как
|
67
|
+
// "Content-Type: application/json"
|
68
|
+
return {
|
69
|
+
id: 1,
|
70
|
+
firstName: 'John',
|
60
71
|
lastName: 'Doe',
|
61
72
|
};
|
62
73
|
}
|
63
74
|
}
|
64
75
|
```
|
65
76
|
|
66
|
-
Регистрация контроллеров и запуск
|
77
|
+
Регистрация контроллеров и запуск сервера.
|
67
78
|
|
68
79
|
```ts
|
69
80
|
import http from 'http';
|
70
81
|
import {RestRouter} from '@e22m4u/ts-rest-router';
|
71
82
|
|
72
|
-
// создание
|
83
|
+
// создание маршрутизатора и регистрация контроллеров
|
73
84
|
const router = new RestRouter();
|
74
85
|
router.registerController(UserController);
|
75
86
|
router.registerController(ProductController);
|
@@ -84,83 +95,169 @@ server.listen('8080', '0.0.0.0', () => {
|
|
84
95
|
});
|
85
96
|
```
|
86
97
|
|
98
|
+
## Валидация
|
99
|
+
|
100
|
+
Указанные ниже декораторы используются для инъекции соответствующих параметров
|
101
|
+
запроса в качестве аргументов метода контроллера. Каждый из указанных декораторов
|
102
|
+
имеет параметр `schemaOrType`, в котором определяется тип ожидаемого значения
|
103
|
+
или схема для проверки данных.
|
104
|
+
|
105
|
+
- `@requestParam(name: string, schemaOrType?: DataSchema | DataType)`
|
106
|
+
*- извлечение URL параметра по названию;*
|
107
|
+
- `@requestQuery(name: string, schemaOrType?: DataSchema | DataType)`
|
108
|
+
*- извлечение query параметра по названию;*
|
109
|
+
- `@requestBody(schemaOrType?: DataSchema | DataType)`
|
110
|
+
*- извлечение тела запроса;*
|
111
|
+
- `@requestField(name: string, schemaOrType?: DataSchema | DataType)`
|
112
|
+
*- извлечение свойства из тела запроса;*
|
113
|
+
- `@requestHeader(name: string, schemaOrType?: DataSchema | DataType)`
|
114
|
+
*- извлечение заголовка запроса по названию;*
|
115
|
+
- `@requestCookie(name: string, schemaOrType?: DataSchema | DataType)`
|
116
|
+
*- извлечение cookie запроса по названию;*
|
117
|
+
|
118
|
+
Проверка входящих данных выполняется встроенным модулем
|
119
|
+
[@e22m4u/ts-data-schema](https://www.npmjs.com/package/@e22m4u/ts-data-schema)
|
120
|
+
(не требует установки). Ниже приводятся константы для определения допустимых
|
121
|
+
типов извлекаемого значения.
|
122
|
+
|
123
|
+
- `DataType.ANY` - принимает любой тип
|
124
|
+
- `DataType.STRING` - строковые значения
|
125
|
+
- `DataType.NUMBER` - числовые значения
|
126
|
+
- `DataType.BOOLEAN` - логические значения
|
127
|
+
- `DataType.ARRAY` - массивы
|
128
|
+
- `DataType.OBJECT` - объекты (не экземпляры)
|
129
|
+
|
130
|
+
Для определения дополнительных условий, используется объект `DataSchema`,
|
131
|
+
с помощью которого можно определить структуру ожидаемого объекта, допустимые
|
132
|
+
элементы массива, функции-валидаторы и другие ограничения входящих данных.
|
133
|
+
|
134
|
+
```ts
|
135
|
+
type DataSchema = {
|
136
|
+
type: DataType;
|
137
|
+
items?: DataSchema;
|
138
|
+
properties?: {[key: string]: DataSchema};
|
139
|
+
required?: boolean;
|
140
|
+
validate?: CallableValidator | CallableValidator[];
|
141
|
+
default?: unknown;
|
142
|
+
}
|
143
|
+
```
|
144
|
+
|
145
|
+
Пример проверки передаваемого объекта методом POST:
|
146
|
+
|
147
|
+
```ts
|
148
|
+
import {DataType} from '@e22m4u/ts-rest-router';
|
149
|
+
import {getAction} from '@e22m4u/ts-rest-router';
|
150
|
+
import {postAction} from '@e22m4u/ts-rest-router';
|
151
|
+
import {requestField} from '@e22m4u/ts-rest-router';
|
152
|
+
import {restController} from '@e22m4u/ts-rest-router';
|
153
|
+
|
154
|
+
@restController('users')
|
155
|
+
class UserController {
|
156
|
+
@postAction() // POST /users
|
157
|
+
async create(
|
158
|
+
@requestBody({ // декоратор тела запроса
|
159
|
+
type: DataType.OBJECT, // в теле запроса ожидается объект
|
160
|
+
properties: {
|
161
|
+
name: { // схема свойства "name"
|
162
|
+
type: DataType.STRING, // свойство должно содержать строку
|
163
|
+
required: true, // свойство не может содержать undefined или null
|
164
|
+
validate: v => v.length > 2, // проверка длины строки
|
165
|
+
},
|
166
|
+
age: { // схема свойства "age"
|
167
|
+
type: DataType.NUMBER, // свойство должно являться числом
|
168
|
+
}
|
169
|
+
},
|
170
|
+
})
|
171
|
+
body: {name: string, age?: number},
|
172
|
+
) {
|
173
|
+
return {
|
174
|
+
id: 1,
|
175
|
+
name: body.name,
|
176
|
+
age: body.age,
|
177
|
+
};
|
178
|
+
}
|
179
|
+
}
|
180
|
+
```
|
181
|
+
|
87
182
|
## Декораторы
|
88
183
|
|
89
184
|
Контроллер и методы:
|
90
185
|
|
91
|
-
- `@
|
92
|
-
- `@
|
93
|
-
- `@
|
94
|
-
- `@
|
95
|
-
- `@
|
96
|
-
- `@
|
97
|
-
- `@
|
186
|
+
- `@restController` - определяет класс как контроллер;
|
187
|
+
- `@restAction` - базовый декоратор для методов;
|
188
|
+
- `@getAction` - метод GET;
|
189
|
+
- `@postAction` - метод POST;
|
190
|
+
- `@putAction` - метод PUT;
|
191
|
+
- `@patchAction` - метод PATCH;
|
192
|
+
- `@deleteAction` - метод DELETE;
|
98
193
|
|
99
194
|
Хуки запроса:
|
100
195
|
|
101
|
-
- `@
|
102
|
-
- `@
|
196
|
+
- `@beforeAction` - middleware перед обработкой запроса;
|
197
|
+
- `@afterAction` - middleware после обработки запроса;
|
103
198
|
|
104
199
|
Параметры запроса:
|
105
200
|
|
106
|
-
- `@
|
107
|
-
- `@
|
108
|
-
- `@
|
109
|
-
- `@
|
110
|
-
- `@
|
111
|
-
- `@
|
112
|
-
- `@
|
113
|
-
- `@
|
114
|
-
- `@
|
115
|
-
- `@
|
116
|
-
- `@requestContext` - доступ к контексту
|
117
|
-
- `@requestData` -
|
118
|
-
|
119
|
-
|
201
|
+
- `@requestParam` - определенный URL параметр;
|
202
|
+
- `@requestParams` - все параметры URL как объект;
|
203
|
+
- `@requestQuery` - определенный query параметр;
|
204
|
+
- `@requestQueries` - все query параметры как объект;
|
205
|
+
- `@requestBody` - тело запроса;
|
206
|
+
- `@requestField` - поле в теле запроса;
|
207
|
+
- `@requestHeader` - определенный заголовок запроса;
|
208
|
+
- `@requestHeaders` - все заголовки запроса как объект;
|
209
|
+
- `@requestCookie` - определенный cookie запроса;
|
210
|
+
- `@requestCookies` - все cookies запроса как объект;
|
211
|
+
- `@requestContext` - доступ к контексту запроса;
|
212
|
+
- `@requestData` - доступ к данным запроса;
|
213
|
+
- `@httpRequest` - экземпляр `IncomingMessage`;
|
214
|
+
- `@httpResponse` - экземпляр `ServerResponse`;
|
215
|
+
|
216
|
+
#### `@restController(options?: ControllerOptions)`
|
120
217
|
|
121
218
|
Определение контроллера.
|
122
219
|
|
123
220
|
```ts
|
124
|
-
@
|
221
|
+
@restController()
|
125
222
|
class UserController {
|
126
|
-
//
|
223
|
+
// ...
|
127
224
|
}
|
128
225
|
```
|
129
226
|
|
130
|
-
Определение
|
227
|
+
Определение базового пути.
|
131
228
|
|
132
229
|
```ts
|
133
|
-
@
|
230
|
+
@restController('users')
|
134
231
|
class UserController {
|
135
|
-
//
|
232
|
+
// ...
|
136
233
|
}
|
137
234
|
```
|
138
235
|
|
139
236
|
Дополнительные параметры декоратора.
|
140
237
|
|
141
238
|
```ts
|
142
|
-
@
|
143
|
-
path: '
|
239
|
+
@restController({
|
240
|
+
path: 'api', // базовый путь
|
144
241
|
before: [authMiddleware], // middleware до обработки запроса
|
145
242
|
after: [loggerMiddleware], // middleware после обработки запроса
|
146
243
|
})
|
147
244
|
class UserController {
|
148
|
-
//
|
245
|
+
// ...
|
149
246
|
}
|
150
247
|
```
|
151
248
|
|
152
|
-
#### `@
|
249
|
+
#### `@getAction(path: string, options?: ActionOptions)`
|
153
250
|
|
154
251
|
Определение метода GET.
|
155
252
|
|
156
253
|
```ts
|
157
|
-
@
|
158
|
-
class UserController {
|
159
|
-
@
|
254
|
+
@restController('users')
|
255
|
+
class UserController {
|
256
|
+
@getAction('whoAmI') // маршрут GET /users/whoAmI
|
160
257
|
async whoAmI() {
|
161
|
-
return {
|
162
|
-
name: 'John',
|
163
|
-
surname: 'Doe',
|
258
|
+
return { // если метод возвращает объект,
|
259
|
+
name: 'John', // то результат будет представлен
|
260
|
+
surname: 'Doe', // как "Content-Type: application/json"
|
164
261
|
};
|
165
262
|
}
|
166
263
|
}
|
@@ -169,9 +266,9 @@ class UserController { // класс контроллера
|
|
169
266
|
Дополнительные параметры декоратора.
|
170
267
|
|
171
268
|
```ts
|
172
|
-
@
|
173
|
-
class UserController {
|
174
|
-
@
|
269
|
+
@restController('users')
|
270
|
+
class UserController {
|
271
|
+
@getAction('whoAmI', { // маршрут GET /users/whoAmI
|
175
272
|
before: [authMiddleware], // middleware до обработки запроса
|
176
273
|
after: [loggerMiddleware], // middleware после обработки запроса
|
177
274
|
})
|
@@ -191,12 +288,12 @@ class UserController { // класс контроллера
|
|
191
288
|
```ts
|
192
289
|
import {RequestContext} from '@e22m4u/js-trie-router';
|
193
290
|
|
194
|
-
@
|
195
|
-
class UserController {
|
196
|
-
@
|
291
|
+
@restController('users')
|
292
|
+
class UserController {
|
293
|
+
@getAction(':id')
|
197
294
|
findById(
|
198
|
-
@requestContext() //
|
199
|
-
ctx: RequestContext, // в качестве
|
295
|
+
@requestContext() // инъекция контекста запроса
|
296
|
+
ctx: RequestContext, // в качестве аргумента
|
200
297
|
) {
|
201
298
|
console.log(ctx.req); // IncomingMessage
|
202
299
|
console.log(ctx.res); // ServerResponse
|
@@ -218,9 +315,9 @@ class UserController { // класс контроллера
|
|
218
315
|
import {ServerResponse} from 'http';
|
219
316
|
import {IncomingMessage} from 'http';
|
220
317
|
|
221
|
-
@
|
318
|
+
@restController('/users') // путь контроллера
|
222
319
|
class UserController { // класс контроллера
|
223
|
-
@
|
320
|
+
@getAction('/:id') // маршрут GET /users/:id
|
224
321
|
findById(
|
225
322
|
@requestContext('req') // декоратор контекста запроса
|
226
323
|
req: IncomingMessage, // включающий свойство "req"
|