NestJS URI 설정

김명일·2022년 6월 28일
1

NestJS URI 설정

NestJs에서는 일반적으로 URI설정을 위해 아래와 같이 controller 데코레이터를 이용한다.

@Controller('/users')
export class UesrController {
	constructor(private readonly userService:UserService){}
}

Versioning

versioning을 위해서 아래와 같이 v1을 추가해줄 수도 있지만 모든 컨트롤러에 추가해주어야 하는 불편함이 있다.

@Controller('/v1/users')
export class UesrController {
	constructor(private readonly userService:UserService){}
}

따라서 아래와 같이 versioning을 설정하게되면 위와 같이 v1을 주지 않아도 기본적으로 /v1이 앞에 붙게 된다.

// ./main.ts

const app = await NestFactory.create(AppModule);

app.enableVersioning({
  type: VersioningType.URI,
  defaultVersion: '1',
});
// or "app.enableVersioning()"

await app.listen(3000);

아래와 같이 controller 데코레이터에서 version을 변경하여 /v2/users로 변경할 수 있다. 또한 version: ['1', '2']로 설정함으로써 두가지 버전에 대해서 해당 컨트롤러로 라우팅 되도록 가능하다.

@Controller({paht: '/users', version: '2'})
export class UesrController {
	constructor(private readonly userService:UserService){}
}

@Version('2') 데코레이터를 통해 컨트롤러 내부에 메소드별 versioning도 가능하다.
뿐만아니라 VERSION_NATURAL 이라는 값을 통해 versioning되지 않도록 설정도 가능하다.

Router Module

URI설정 마지막 방법은 계층적 구조를 설정하도록 도와주는 router module이다.

@Module({
  controller: [UserAdminController],
})
export class UserAdminModule {}
@Controller({paht: '/users'})
export class UserAdminComtroller {}

위와 같은 UserAdminModule이 있을 때, 아래와 같은 설정을 통해 /admin/users로 들어온 요청을 해당 컨트롤러로 연결해준다.

@Module({
  imports: [
    AdminModule,
    RouterModule.register([
      {
        path: 'admin',
        module: UserAdminModule,
      },
    ]),
  ],
})
export class AppModule {}

아래와 같이 children 프로퍼티를 통해 /admin/dashboard/..., /admin/metrics/... 와 같이 계층적으로 구성할 수 있다.

RouterModule.register([
  {
    path: 'admin',
    module: AdminModule,
    children: [
      {
        path: 'dashboard',
        module: DashboardModule,
      },
      {
        path: 'metrics',
        module: MetricsModule,
      },
    ],
  },
]);
profile
주니어 백엔드 🐶🦶🏻📏

1개의 댓글

comment-user-thumbnail
2022년 9월 28일

감사합니다!

답글 달기