NotFoundException
NotFoundException은 NestJS에서 제공하는 예외 클래스 중 하나로, 주로 찾고자 하는 리소스가 존재하지 않을 떄 일관된 에러 응답을 제공하기 위해 사용한다.
import { Injectable, NotFoundException } from '@nestjs/common';
import { ApiData } from './entities/touch-api.entity';
@Injectable()
export class TouchApiService {
private data: ApiData[] = [];
getAll(): ApiData[] {
return this.data;
}
getOne(id: string): ApiData {
const data = this.data.find((data) => data.id === parseInt(id));
if (!data) {
throw new NotFoundException(`data id값을 찾을 수 없습니다. ${id}`);
}
return data;
}
remove(id: string) {
this.getOne(id);
this.data.filter((data) => data.id !== parseInt(id));
}
create(apiData) {
this.data.push({
id: this.data.length + 1,
...apiData,
});
}
}
위 코드를 보면 getOne 메서드에서 특정 id로 데이터를 검색할 때, 해당 id에 대한 데이터가 this.data 배열에 없을 수 있다.
이 경우 NotFoundException을 발생시켜 클라이언트에게 요청한 데이터가 존재하지 않음을 알린다.
NotFoundException이 없으면 메서드는 undifined를 반환할 수 있고 이후 데이터 접근 시 null 또는 undifined 오류가 발생할 수 있다. 그래서 이 예외를 통해 명확하게 리소스가 없음을 알리는 역할을 한다.
update
다음은 이전 포스팅을 이어서 update를 해보려 한다.
일단 service에서 로직을 이렇게 작성해줬다.
import { Injectable, NotFoundException } from '@nestjs/common';
import { ApiData } from './entities/touch-api.entity';
@Injectable()
export class TouchApiService {
private data: ApiData[] = [];
update(id: string, updateData) {
const data = this.getOne(id);
this.remove(id);
this.data.push({ ...data, ...updateData });
}
}
먼저 data를 변수선언 해서 값이 없다면 NotFoundException 발생하게 처리하고 전체 데이터를 수정해야 되기 때문에
remove함수를 작동시켜서 기존의 데이터를 지우고 새로운 데이터를 추가하는 방식으로 진행했다.
비효율적인건 알지만 최대한 간단하게 시작해서 점점 딥하게 진행할 예정이랑 javascript object를 최대한 활용 해봤다.
처음에는 update구문을 작동시키면 기존게 삭제가 안돼서 remove함수를 밑에처럼 바꿔줬다.
remove(id: string) {
this.getOne(id);
this.data = this.data.filter((data) => data.id !== parseInt(id));
}
this.data를 재선언 하는 방식으로 원본 배열에서 특정 요소를 제거하고 새로운 배열로 대체하기 위해 사용했다.
filter 메서드는 원본 배열을 직접 수정하지 않고 조건에 맞는 요소들만 포함한 새로운 배열을 반환하기 때문에, 기존 배열을 업데이트하려면 반환된 배열을 다시 this.data에 할당해야 됐다. (사실 까먹은 사실이여서 기록하기위해 작성했다..)
저렇게 하면 아래같은 결과를 얻을 수 있다.
'Programming > Nest.js' 카테고리의 다른 글
Jest로 NestJS 코드 테스트 작성(1) (1) | 2024.11.05 |
---|---|
NestJS Dto? Pipe? Partial? (0) | 2024.10.31 |
NestJS Service 란?(1) (0) | 2024.10.29 |
NestJS Decorator 심층분석 (0) | 2024.10.29 |
NestJS 간단한 API 실습 (0) | 2024.10.24 |