РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsSpCoSp 201 of 201 menu
◀

Разрешение по специфичности в Nest

Несколько обработчиков делят один префикс, и авторы меняют файлы независимо. Параметр оказался выше постоянного сегмента, а переставлять обработчики вручную каждый раз неудобно.

В Nest 12 опция routeResolutionStrategy со значением specificity регистрирует маршруты от более конкретных к общим: литеральные сегменты выше параметров, параметры выше шаблонов с звёздочкой. Значение по умолчанию declaration сохраняет порядок объявления. На Fastify роутер уже ранжирует пути, и эта сортировка там не меняет поведение; на Express она решает конфликт затенения.

Покажем на примере постов:

import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module.js'; async function bootstrap() { const app = await NestFactory.create(AppModule, { routeResolutionStrategy: 'specificity', }); await app.listen(process.env.PORT ?? 3000); } await bootstrap();

Контроллер может держать параметр выше постоянного сегмента: при стратегии specificity запрос архива всё равно попадёт в литеральный маршрут:

import { Controller, Get, Param } from '@nestjs/common'; @Controller('posts') export class PostsController { @Get(':id') getPost(@Param('id') id: string): string { return id; } @Get('archive') getArchive(): string { return 'Post archive'; } }
import { Module } from '@nestjs/common'; import { PostsController } from './posts.controller.js'; @Module({ controllers: [PostsController], }) export class PostsModule {}
import { Module } from '@nestjs/common'; import { PostsModule } from './posts/posts.module.js'; @Module({ imports: [PostsModule], }) export class AppModule {}

Включите выбор более конкретного адреса при создании приложения и разместите в WorkersController постоянный сегмент и параметр так, чтобы постоянное слово открывало свою страницу.

←
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить