Built-in HTTP exceptions
Nest가 기본적으로 제공하는 exception들이 있다.(HttpException을 기반으로 하는)
BadRequestException
UnauthorizedException
NotFoundException
ForbiddenException
NotAcceptableException
RequestTimeoutException
이외에도 여러 exception을 제공한다. https://docs.nestjs.com/exception-filters
서비스에서 Exception 처리하기!
가장 기본적인 exception처리를 해보자..UserService
에서 id로 찾은 user가 존재하지 않을 경우 NotFoundExcption
을 발생하도록 한다.
Promise<User>가 반환값이기 떄문에, 리포지토리에서 find할 때는 await을 꼭 붙여주도록 하자
@Injectable()
export class UserService {
constructor(private userRepository: UserRepository) {}
findAll(): Promise<User[]> {
return this.userRepository.find();
}
async findById(id: string): Promise<User> {
const findUser = await this.userRepository.findOne(id);
if (!findUser) {
throw new NotFoundException(
`id: ${id} 에 해당하는 유저가 존재하지 않습니다`,
);
}
return findUser;
}
}
이렇게 존재하지 않는 id로 조회를 할 경우, NotFoundException
이 발생한다.
유효성 검사
path에서 값을 가져올 때, 기본 type은 string이다. 이것을 number로만 입력하도록 제한할 필요가 있다.
우선, ValidationPipe
설정에 transform
을 추가한다.main.ts
에서 transfrom: true
로 설정하면, string으로 넘어오는 값을 알아서 number로 변환해준다.
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(
new ValidationPipe({
transform: true,
whitelist: true,
forbidNonWhitelisted: true,
}),
);
await app.listen(3000);
}
bootstrap();
그런데 이렇게만 하면 문자열을 입력했을 때 데이터베이스에서 조회하는 과정에서 NaN
에러가 발생한다.
그래서 ParseIntPipe
를 @Param
데코레이터에 추가한다.
import {
Controller,
Get,
Param,
ParseIntPipe
} from '@nestjs/common';
import { ResponseUserDto } from './dto/response.dto';
import { UserService } from './service/user.service';
@Controller('users')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get()
async getUsers(): Promise<ResponseUserDto[]> {
return await this.userService.findAll();
}
@Get('/:id')
async getUser(
@Param('id', new ParseIntPipe()) userId: number,
): Promise<ResponseUserDto> {
return await this.userService.findById(userId);
}
}
'STUDY > Node.js' 카테고리의 다른 글
Node.js | Crypto 모듈을 사용해 비밀번호 암호화 하기 (0) | 2022.11.19 |
---|---|
NestJS | API 만들기 (2) - Controller (0) | 2021.08.04 |
NestJS | API 만들기 (1) - Repository (0) | 2021.08.04 |
NestJS | 데이터베이스 연결, 설정 정보를 입력하는 다양한 방법... (database connection) (0) | 2021.07.28 |
NestJS | 유효성 검사 validation (0) | 2021.07.23 |