nest.js 는 controller 에서 endpoint 들을 정의하게된다.
이때, 생각보다 순서에 관해서 간과하는 부분들이 많이 있는데, 오늘은 이에 대해서 다뤄보려고 한다.
아래를 보자
@Get('/:id')
@Get('/test')
GET /test
요청을 보낼 경우, 순서대로 확인하다가 /:id
에 먼저 걸리기 때문에 /:id
요청으로 처리되게된다.
그렇다면 다음의 경우엔 어떨까?
@Get('/:id')
@Get('/test/this')
해당 구현에 GET /test/this
요청을 보낼 경우 어떻게 될까?
애매하다. test 를 id 로 취급해서 위에 걸릴까? 아니면 그냥 아래에 걸릴까?
이 경우 기본적으로 경로 패턴이 가장 긴 것을 우선시해서 매칭된다.
/:id
는 하나의 경로 세그먼트, /test/this
는 두개의 경로 세그먼트를 갖고있기 때문에 /test/this
에 매칭된다.
https://stackoverflow.com/questions/57346320/how-split-routes-by-controllers-in-nestjs-router
vs
// src/routes.ts
import { Routes } from 'nest-router';
import { CatsModule } from './cats/cats.module';
import { DogsModule } from './dogs/dogs.module';
import { NinjaModule } from './ninja/ninja.module';
export const routes: Routes = [
{
path: '/ninja',
module: NinjaModule,
children: [{ path: '/cats', module: CatsModule }, { path: '/dogs', module: DogsModule }],
},
];
[nest project example] https://github.com/nestjsx/nest-router/blob/master/examples/nest-v5x/src/routes.ts