성공·검증 실패·부재·충돌을 HTTP 의미에 맞게 구분합니다.
createError는 statusCode와 공개 가능한 statusMessage로 요청을 중단합니다. 예기치 않은 내부 오류는 세부 정보를 노출하지 않고 관측 시스템에 기록합니다.
400, 401, 403, 404, 409와 500의 의미를 API 계약에 일관되게 적용합니다.
오류 응답에 안정적인 업무 code가 필요하면 클라이언트가 문자열 문구를 비교하지 않게 합니다.
모든 오류를 200과 {success:false}로 반환하면 캐시와 관측 도구가 실패를 놓칩니다.
로컬 프로젝트에서 확인해보세요id가 2이면 404를 반환하는 조건을 추가하세요.
// server/api/courses.get.ts
export default defineEventHandler((event) => {
const id = String(getQuery(event).id ?? "nuxt");
if (!/^[a-z0-9-]+$/.test(id)) {
throw createError({ statusCode: 400, statusMessage: "올바른 id가 아닙니다." });
}
return { id, title: "Nuxt API", status: "published" };
});