|
|
@@ -33,16 +33,74 @@ const {TrieRouterDataMapper} = require('@e22m4u/js-trie-router-data-mapper');
|
|
|
|
|
|
## Описание
|
|
|
|
|
|
-Модуль позволяет определить схему данных маршрута. На основе схемы выполняется
|
|
|
-автоматический парсинг, валидация и проекция данных HTTP-запроса и ответа
|
|
|
-сервера. Сформированные данные помещаются в контекст запроса или определяют
|
|
|
-структуру возвращаемого ответа.
|
|
|
+Модуль позволяет определить разметку данных маршрута. На основе разметки
|
|
|
+выполняется автоматический парсинг, валидация и проекция данных HTTP-запроса
|
|
|
+и ответа сервера. Сформированные данные помещаются в контекст запроса
|
|
|
+или определяют структуру возвращаемого ответа.
|
|
|
|
|
|
Модуль использует синтаксис указанных ниже схем (не требуют установки).
|
|
|
|
|
|
- Схема данных [@e22m4u/js-data-schema](https://www.npmjs.com/package/@e22m4u/js-data-schema)
|
|
|
- Схема проекции [@e22m4u/js-data-projector](https://www.npmjs.com/package/@e22m4u/js-data-projector)
|
|
|
|
|
|
+Разметка определяется в метаданных маршрута.
|
|
|
+
|
|
|
+```js
|
|
|
+import {HttpData, DataType} from '@e22m4u/js-trie-router-data-mapper';
|
|
|
+
|
|
|
+router.defineRoute({
|
|
|
+ method: HttpMethod.POST,
|
|
|
+ path: '/createUser',
|
|
|
+ meta: {
|
|
|
+ // разметка данных
|
|
|
+ dataMapper: {
|
|
|
+ userData: { // свойство "userData" будет добавлено в "ctx.state"
|
|
|
+ source: HttpData.REQUEST_BODY, // источник данных
|
|
|
+ schema: DataType.OBJECT, // тип или схема данных
|
|
|
+ // property: ... (извлекаемое свойство, опционально)
|
|
|
+ // projection: ... (схема проекции)
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ handler: ({state: {userData}}) => {
|
|
|
+ // ...
|
|
|
+ },
|
|
|
+});
|
|
|
+```
|
|
|
+
|
|
|
+Параметры разметки (метаданные маршрута).
|
|
|
+
|
|
|
+- `source: HttpData` источник данных;
|
|
|
+- `property?: string` извлечение указанного свойства;
|
|
|
+- `schema?: DataType | DataSchema` тип или схема данных;
|
|
|
+- `projection?: DataProjection` схема проекции;
|
|
|
+
|
|
|
+Константы источников данных (параметр `source`).
|
|
|
+
|
|
|
+```js
|
|
|
+export const HttpData = {
|
|
|
+ REQUEST_PARAMS: 'requestParams',
|
|
|
+ REQUEST_QUERY: 'requestQuery',
|
|
|
+ REQUEST_HEADERS: 'requestHeaders',
|
|
|
+ REQUEST_COOKIES: 'requestCookies',
|
|
|
+ REQUEST_BODY: 'requestBody',
|
|
|
+ RESPONSE_BODY: 'responseBody',
|
|
|
+};
|
|
|
+```
|
|
|
+
|
|
|
+Константы типов данных (подробнее [@e22m4u/js-data-schema](https://www.npmjs.com/package/@e22m4u/js-data-schema)).
|
|
|
+
|
|
|
+```js
|
|
|
+export const DataType = {
|
|
|
+ ANY: "any",
|
|
|
+ STRING: "string",
|
|
|
+ NUMBER: "number",
|
|
|
+ BOOLEAN: "boolean",
|
|
|
+ ARRAY: "array",
|
|
|
+ OBJECT: "object",
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
## Использование
|
|
|
|
|
|
Подключение модуля к маршрутизатору.
|
|
|
@@ -93,26 +151,6 @@ router.defineRoute({
|
|
|
});
|
|
|
```
|
|
|
|
|
|
-Список источников данных.
|
|
|
-
|
|
|
-```js
|
|
|
-export const HttpData = {
|
|
|
- REQUEST_PARAMS: 'requestParams',
|
|
|
- REQUEST_QUERY: 'requestQuery',
|
|
|
- REQUEST_HEADERS: 'requestHeaders',
|
|
|
- REQUEST_COOKIES: 'requestCookies',
|
|
|
- REQUEST_BODY: 'requestBody',
|
|
|
- RESPONSE_BODY: 'responseBody',
|
|
|
-};
|
|
|
-```
|
|
|
-
|
|
|
-Описание параметров `dataMapper` (метаданные маршрута).
|
|
|
-
|
|
|
-- `source: HttpData` источник данных;
|
|
|
-- `property?: string` извлечение указанного свойства;
|
|
|
-- `schema?: DataSchema` схема для парсинга и валидации;
|
|
|
-- `projection?: DataProjection` схема проекции данных;
|
|
|
-
|
|
|
Пример проекции ответа.
|
|
|
|
|
|
```js
|