Перейти до основного вмісту

@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 = (
nodeReq: NodeRequest,
nodeRes: NodeResponse,
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<MetadataPerMod2> - це масив динамічних метаданих, які призначені для створення обробників запитів. Кожен елемент цього масиву - це окремий роут.

Група розширень PRE_ROUTER_EXTENSIONS

З даного модуля також експортується токен групи розширень PRE_ROUTER_EXTENSIONS. Розширення з цієї групи використовує метадані, які повертає група розширень ROUTES_EXTENSIONS, щоб створювати обробники HTTP-запитів.