HttpException
이 페이지에서 찾을 수 있는 것
| 심볼 | 분류 | 설명 |
|---|---|---|
HttpException | Class | HTTP 오류 응답을 위한 레거시 에러 클래스 |
개요
HttpException은 라우트 핸들러와 미들웨어 내에서 HTTP 오류 응답을 알리는 에러 클래스입니다. Error를 확장하며 status와 message 두 필드만 제공합니다.
import { HttpException } from '@asapjs/router';클래스 정의
class HttpException extends Error {
public status: number;
public message: string;
constructor(status?: number, message?: string);
}| 파라미터 | 타입 | 기본값 | 설명 |
|---|---|---|---|
status | number | 500 | 클라이언트에 전송할 HTTP 상태 코드. |
message | string | '알 수 없는 서버 오류가 발생했습니다.' | 응답 바디에 포함되는 오류 메시지. |
에러 처리 경로
경로 1: Wrapper 내부 — errorToResponse()
라우트 핸들러에서 던져진 HttpException은 Wrapper의 try/catch에서 잡혀 @asapjs/error의 errorToResponse()로 위임됩니다. 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/error의 error() 팩토리를 사용하면:
- 명시적
errorCode로 클라이언트 에러 분기가 용이합니다. data필드로 에러 컨텍스트를 타입 안전하게 전달합니다.- 데코레이터의
errors옵션에 등록하면 Swagger에 에러 응답 스키마가 자동 생성됩니다.
관련 항목
- jwtVerification — JWT 에러에서
HttpException을 사용하는 케이스 - ExecuteArgs — Wrapper의 에러 처리 동작
- HTTP Method Decorators —
errors옵션과ErrorCreator
Last updated on