urlmapper
npm - https://www.npmjs.com/package/@evo/urlmapper
Данный пакет позволяет гибко работать с url роутингом (аналог routes
из python).
Пример:
// создаем mapper
const mapper = new UrlMapper({
typeAlias: /\w\-]+/,
companyId: /\d+/,
});
// добавляем шаблон
mapper.connect('/{typeAlias};');
mapper.connect('/{typeAlias};c{companyId}');
// url dispatch
const { params } = mapper.match('/services;c123')
// params == { typeAlias: 'services', companyId: '123' }
// url generation
const url = mapper.url('/services;c123', { companyId: '111'});
// url === '/services;c111'
Создание mapper-а
Создаем mapper с параметрами typeAlias
и companyId
:
const mapper = new UrlMapper({
typeAlias: /\w\-]+/,
companyId: /\d+/,
});
url match
mapper.connect('/{typeAlias};');
const { params, query, match } = mapper.match('/services?test=1')
// params == { typeAlias: 'services' }
// query == { test: 1 }
// match -> RegexMatchResult
Создание нового url с помощью newUrl
mapper.connect('/test-{typeAlias};');
const testUrl = mapper.newUrl({ typeAlias: 'alias' }) // /test-alias
Добавление параметра в существующий url
Подстановка шаблонных параметров:
Допустим имея шаблон вида /{typeAlias}:c{companyId}
и url /services;c123
хотим поменять companyId
(123
):
mapper.url('/services;c123', { companyId: 111 }) // /services;c111
Добавление GET параметров
Все параметры, которые не были обьявлены как шаблонные параметры будут добавлены в GET:
mapper.url('/services;c123', { test: 'test' }) // /services;c123?test=test
// Так-же можно добавлять список аргументов
mapper.url('/services;c123', { a: ['1', '2']}) // /services;c123?a=1&a=2
Удаление аргументов
Для удаления необходимо передать значение undefined
:
mapper.connect('/{typeAlias}');
mapper.connect('/{typeAlias};c111');
// будет произведен поиск ближайшего по соответствию шаблона и найдет - '/{typeAlias}'
// в противном случае - будет exception
mapper.url('/services;c123', { companyId: undefined }) // /services