getQuery 입력을 허용 목록과 범위로 검증합니다.
URL query는 신뢰할 수 없는 문자열 입력입니다. 기대 타입으로 변환하고 허용 목록과 숫자 범위를 검사한 뒤 업무 계층에 전달합니다.
검증 실패는 createError로 안정적인 statusCode와 공개 메시지를 반환합니다.
정렬 열과 방향은 SQL 문자열에 직접 붙이지 말고 서버 허용 목록에서 선택합니다.
Number(value) 결과의 NaN과 음수, 지나치게 큰 limit을 확인하지 않으면 과도한 조회가 가능합니다.
로컬 프로젝트에서 확인해보세요sort를 title과 createdAt만 허용하도록 추가하세요.
// server/api/courses.get.ts
export default defineEventHandler((event) => {
const query = getQuery(event);
const raw = Array.isArray(query.limit) ? query.limit[0] : query.limit;
const limit = Number(raw ?? 10);
if (!Number.isInteger(limit) || limit < 1 || limit > 50) {
throw createError({
statusCode: 400,
statusMessage: "limit은 1~50 정수여야 합니다.",
});
}
return {
limit,
items: Array.from({ length: Math.min(limit, 3) }, (_, id) => ({
id: id + 1,
title: "강좌 " + (id + 1),
})),
};
});