Разрешение по специфичности в 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
постоянный сегмент и параметр
так, чтобы постоянное слово
открывало свою страницу.