Param과 Query 입력을 읽고 허용 범위를 검증합니다.
@Param은 경로 segment, @Query는 query string을 주입합니다. 둘 다 외부 문자열 입력이므로 숫자 변환과 형식·범위 검증이 필요합니다.
ParseIntPipe 같은 내장 Pipe로 변환과 실패 응답을 일관되게 만듭니다.
정렬 열과 방향은 허용 목록에서 선택하고 쿼리 문자열을 DB 문장에 직접 연결하지 않습니다.
TypeScript의 id:number 표기만으로 HTTP 문자열이 자동 변환된다고 생각하지 마세요.
로컬 프로젝트에서 확인해보세요limit query에 DefaultValuePipe와 ParseIntPipe를 적용하세요.
import "reflect-metadata";
import { Controller, Get, Module, Param, ParseIntPipe, Query } from "@nestjs/common";
import { NestFactory } from "@nestjs/core";
@Controller("courses")
class CourseController {
@Get(":id") findOne(
@Param("id", ParseIntPipe) id: number,
@Query("view") view = "summary",
) {
return { id, view, title: "NestJS 강좌" };
}
}
@Controller()
class HomeController {
@Get() home() {
return `<main><a href="/courses/7?view=detail">강좌 7 조회</a></main>`;
}
}
@Module({ controllers: [HomeController, CourseController] })
class AppModule {}
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(4173, "0.0.0.0");
}
bootstrap();