관리 메뉴

나의 개발일지(김지헌)

항해 99 76일차 12/03일 본문

항해 99

항해 99 76일차 12/03일

코딩이좋아요 2022. 12. 4. 03:43

오늘은 에러 쪽 코드를 바꾸고 , 토요일 날씨만 보여주는 api를 만들었다.

기존 코드

//Error interface
//에러 타입 추가
export interface Error {
  name: string;
  status?: number;
}
//에러 생성자
export interface ErrorConstructor {
  new (message?: string): Error;
}
//시스템 에러
export interface SystemError {
  status: number;
  message: string;
}

//exceptions.ts
import { ErrorConstructor } from '../interface/Error';
//오류 선언해준다는 의미
declare let Error: ErrorConstructor;

//잘못된 매개변수 오류
export class InvalidParamsError extends Error {
  //에러 메세지와 스테이터스를 생성함 데이터가 잘못 되었을때
  constructor(message: string, status?: number) {
    //생성한 메세지를 상속받아 사용
    super(message); //상속 받은것은 꼭 써야함 .
    this.status = status || 409; //파람스 에러 409
    this.name = 'InvalidParamsError';
  }
}
//유효성 검사 에러
export class ValidationErrors extends Error {
  constructor(message: string, status?: number) {
    super(message);
    this.status = status || 412;
    this.name = 'ValidationError';
  }
}
//인증 에러
export class Unauthorized extends Error {
  constructor(message: string, status?: number) {
    super(message);
    this.status = status || 401;
    this.name = 'Unauthorized';
  }
}

처음 작성된 코드는 내장된 Error의 인터페이스를 불러와서 상속을 받고 재선언 후 사용하고 있는데 너무 비효율 적이고 이미 내장된 코드를 한번더 만든다는것 자체가 좋지 않은 코드였다.(이유에는 2022버전을 사용해서 내장된 Error인터페이스가 다른것을 보고있는 문제)

 

개선된 코드

//Error interface.ts
//시스템 에러
export interface ErrorHandler extends Error {
  status: number;
}

//exception.ts
//잘못된 매개변수 오류
export class InvalidParamsError extends Error{
  public status:number
  //에러 메세지와 스테이터스를 생성함 데이터가 잘못 되었을때
  constructor(message: string, status?: number) {
    //생성한 메세지를 상속받아 사용
    super(message); //상속 받은것은 꼭 써야함 .
    this.status = status || 409; //파람스 에러 409
    this.name = 'InvalidParamsError';
  }
}
//유효성 검사 에러
export class ValidationErrors extends Error {
  public status:number
  constructor(message: string, status?: number) {
    super(message);
    this.status = status || 412;
    this.name = 'ValidationError';
  }
}
//인증 에러
export class Unauthorized extends Error {
  public status:number
  constructor(message: string, status?: number) {
    super(message);
    this.status = status || 401;
    this.name = 'Unauthorized';
  }
}

tsconfig.json에서 2022버전을 지우고 es6나  2015 버전에 내장된 Error interface를 상속받아 없는 status를 추가해서 사용을 했다. 좀 더 깔끔한 코드가 작성된거 같다.

'항해 99' 카테고리의 다른 글

항해 99 78일차 12/05일  (0) 2022.12.06
항해 99 77일차 12/04일  (0) 2022.12.05
항해 99 75일차 12/02일  (0) 2022.12.03
항해 99 74일차 12/01일  (0) 2022.12.02
항해 99 73일차 11/30일  (0) 2022.11.30