항해 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를 추가해서 사용을 했다. 좀 더 깔끔한 코드가 작성된거 같다.