Skip to Content

HttpException

이 페이지에서 찾을 수 있는 것

심볼분류설명
HttpExceptionClassHTTP 오류 응답을 위한 레거시 에러 클래스

개요

HttpException은 라우트 핸들러와 미들웨어 내에서 HTTP 오류 응답을 알리는 에러 클래스입니다. Error를 확장하며 statusmessage 두 필드만 제공합니다.

import { HttpException } from '@asapjs/router';

클래스 정의

class HttpException extends Error { public status: number; public message: string; constructor(status?: number, message?: string); }
파라미터타입기본값설명
statusnumber500클라이언트에 전송할 HTTP 상태 코드.
messagestring'알 수 없는 서버 오류가 발생했습니다.'응답 바디에 포함되는 오류 메시지.

에러 처리 경로

경로 1: Wrapper 내부 — errorToResponse()

라우트 핸들러에서 던져진 HttpExceptionWrapper의 try/catch에서 잡혀 @asapjs/errorerrorToResponse()로 위임됩니다. HttpException에는 errorCode가 없으므로 레거시 호환 코드가 사용됩니다:

{ "status": 404, "errorCode": "LEGACY_HTTP_EXCEPTION", "message": "User not found" }

경로 2: Express 전역 에러 핸들러

Wrapper를 거치지 않는 에러(예: 미들웨어에서 next(error) 호출)는 Express 미들웨어 체인 끝에 등록된 errorHandler가 처리합니다:

{ "status": 500, "message": "에러 메시지" }

사용 예제

import { HttpException } from '@asapjs/router'; import { ExecuteArgs } from '@asapjs/router'; async login({ body }: ExecuteArgs) { const user = await this.userService.findByEmail(body.email); if (!user) { throw new HttpException(404, 'User not found'); } const valid = await user.verifyPassword(body.password); if (!valid) { throw new HttpException(401, 'Invalid credentials'); } return this.userService.issueToken(user); }

HttpException vs HttpError (@asapjs/error)

항목HttpException (@asapjs/router)HttpError (@asapjs/error)
생성 방식new HttpException(status, message)error(status, code, message, schema)() 팩토리
errorCode없음 ('LEGACY_HTTP_EXCEPTION'으로 처리)있음 (예: 'USER_NOT_FOUND')
data 필드없음있음 (스키마 기반 타입 안전 데이터)
Swagger 에러 스키마자동 생성 안 됨errors 옵션으로 자동 생성
권장 여부레거시 — 기존 코드 호환용권장 — 새 코드에서 사용

마이그레이션 가이드

Before (HttpException):

throw new HttpException(404, 'User not found'); // → { status: 404, errorCode: 'LEGACY_HTTP_EXCEPTION', message: 'User not found' }

After (HttpError via @asapjs/error):

import { error } from '@asapjs/error'; import { TypeIs } from '@asapjs/schema'; const UserNotFound = error(404, 'USER_NOT_FOUND', '사용자를 찾을 수 없습니다', { userId: TypeIs.INT({ comment: '사용자 ID' }), }); // 핸들러에서: throw UserNotFound({ userId: 42 }); // → { status: 404, errorCode: 'USER_NOT_FOUND', message: '사용자를 찾을 수 없습니다', data: { userId: 42 } }

@asapjs/errorerror() 팩토리를 사용하면:

  • 명시적 errorCode로 클라이언트 에러 분기가 용이합니다.
  • data 필드로 에러 컨텍스트를 타입 안전하게 전달합니다.
  • 데코레이터의 errors 옵션에 등록하면 Swagger에 에러 응답 스키마가 자동 생성됩니다.

관련 항목

Last updated on