@ditsmod/routing
В модулі @ditsmod/routing
реалізується маршрутизатор, що має інтерфейс Router
:
interface Router {
on(method: HttpMethod, path: string, handle: RouteHandler): this;
all(path: string, handle: RouteHandler): this;
find(method: HttpMethod, path: string): RouterReturns;
}
type RouteHandler = (
rawReq: RawRequest,
rawRes: RawResponse,
params: PathParam[],
queryString: any
) => Promise<void>;
class RouterReturns {
handle: RouteHandler | null;
params: PathParam[] | null;
}
interface PathParam {
key: string;
value: string;
}
Готовий приклад використання даного модуля можна знайти в будь-якому прикладі в репозиторії Ditsmod.
Встановлення та підключення
Встановлення:
npm i @ditsmod/routing
Підключення:
import { rootModule } from '@ditsmod/core';
import { RoutingModule } from '@ditsmod/routing';
@rootModule({
imports: [RoutingModule],
// ..
})
export class AppModule {}
Інтеграція кастомного роутера
Якщо ви хочете інтегрувати кастомний роутер для застосунку Ditsmod, достатньо щоб ваш роутер імплементував вищезазначений інтерфейс Router
, після чого його можна додавати в провайдери на рівні застосунку:
import { featureModule, Router } from '@ditsmod/core';
import { MyRouter } from './my-router.js';
@featureModule({
providersPerApp: [{ token: Router, useClass: MyRouter }],
})
export class MyCustomRouterModule {}
Група розширень ROUTES_EXTENSIONS
З даного модуля експортується токен групи розширень ROUTES_EXTENSIONS
. Розширення з цієї групи повертають метадані з інтерфейсом Array<MetadataPerMod3>
- це масив динамічних метаданих, які призначені для створення обробників запитів. Кожен елемент цього масиву - це окремий роут.
Група розширень PRE_ROUTER_EXTENSIONS
З даного модуля також експортується токен групи розширень PRE_ROUTER_EXTENSIONS
. Розширення з цієї групи використовує метадані, які повертає група розширень ROUTES_EXTENSIONS
, щоб створювати обробники HTTP-запитів.