## @e22m4u/js-trie-router-data-mapper Парсинг и валидация данных для [@e22m4u/js-trie-router](https://www.npmjs.com/package/@e22m4u/js-trie-router). ## Установка ```bash npm install @e22m4u/js-trie-router-data-mapper ``` Модуль поддерживает ESM и CommonJS стандарты. *ESM* ```js import {TrieRouterDataMapper} from '@e22m4u/js-trie-router-data-mapper'; ``` *CommonJS* ```js const {TrieRouterDataMapper} = require('@e22m4u/js-trie-router-data-mapper'); ``` ## Использование Подключение модуля к маршрутизатору. ```js import {TrieRouter} from '@e22m4u/js-trie-router'; import {TrieRouterDataMapper} from '@e22m4u/js-trie-router-data-mapper'; const router = new TrieRouter(); router.useService(TrieRouterDataMapper); ``` Пример парсинга Query-параметра. ```js router.defineRoute({ method: HttpMethod.GET, path: '/parseQuery', meta: { dataMap: { // определение карты данных filter: { // свойство "filter" будет добавлено в "state" source: HttpData.REQUEST_QUERY, // откуда брать данные property: 'filter', // извлечь свойство (опционально) schema: { // схема данных для парсинга и проверки type: DataType.OBJECT, // разобрать значение как объект required: true, // в противном случае выбросить ошибку }, // подробнее о схеме данных (параметр "schema") // см. модуль @e22m4u/js-data-schema }, }, }, handler: ({state: {filter}}) => { // для запроса GET /parseQuery?filter={"foo":"bar"} // значение параметра "filter" будет следующим: console.log(typeof filter); // "object" console.log(filter); // {foo: 'bar'} // если значение разобрать не удалось, // то будет выброшена ошибка return filter; }, }); ``` Список источников данных. ```js export const HttpData = { REQUEST_PARAMS: 'requestParams', REQUEST_QUERY: 'requestQuery', REQUEST_HEADERS: 'requestHeaders', REQUEST_COOKIES: 'requestCookies', REQUEST_BODY: 'requestBody', RESPONSE_BODY: 'responseBody', }; ``` Описание параметров `dataMap` (метаданные маршрута). - `source: HttpData` источник данных; - `property?: string` извлечение указанного свойства; - `schema?: DataSchema` схема данных для парсинга и проверки; - `projection?: DataProjection` схема проекции данных; Пример проекции ответа. ```js router.defineRoute({ method: HttpMethod.GET, path: '/responseProjection', meta: { dataMap: { // определение карты данных response: { // свойство "response" не будет добавлено в "state", // так как в данном случае источником выступает // ответ маршрута source: HttpData.RESPONSE_BODY, // источник данных projection: {foo: true, bar: false}, // схема проекции // подробнее о схеме проекции (параметр "projection") // см. модуль @e22m4u/js-data-projector }, }, }, handler: () => { return { foo: 10, // доступно, явное правило bar: 20, // исключено, явное правило baz: 30, // исключено, отсутствует в схеме проекции }; }, }); // для запроса GET /responseProjection // ответ будет {"foo":10} ``` Структура схемы данных и схемы проекции. - Схема данных см. описание [@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) ## Тесты ```bash npm run test ``` ## Лицензия MIT