Конфликт маршрутов в Nest
Рядом висят адрес с фиксированным словом в пути и адрес с номером в том же месте. Запрос на страницу архива уходит в обработчик номера, и в ответ приходит строка вместо ожидаемого текста.
На адаптере Express Nest регистрирует
маршруты в порядке объявления.
Параметр принимает любой сегмент,
в том числе слово архива.
Постоянный путь ставят в коде
раньше параметра, тогда совпадение
по слову срабатывает до подстановки
номера. Nest 12 умеет предупреждать
о таком затенении через
routeConflictPolicy.shadow
при старте, но порядок объявления
остаётся надёжным способом.
Покажем на примере постов:
import { Controller, Get, Param } from '@nestjs/common';
@Controller('posts')
export class PostsController {
@Get('archive')
getArchive(): string {
return 'Post archive';
}
@Get(':id')
getPost(@Param('id') id: string): string {
return id;
}
}
Контроллер подключим в модуле темы, а модуль в корне:
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
постоянный адрес и адрес с номером
так, чтобы постоянное слово
не попадало в номер, и подключите
модуль темы к корню.