빌트인 ParseUUIDPipe를 사용하면 다음과 같은 에러 메세지(message 필드)를 확인할 수 있다.
{
"success": false,
"statusCode": 400,
"error": "Bad Request",
"message": "Validation failed (uuid is expected)",
"timestamp": "2023-10-31T15:46:16.522Z",
"path": "/restaurants/1"
}
여기서 message 필드에는 빌트인 ParseUUIDPipe가 반환하는 에러 메세지가 들어가는데, 이 에러 메세지를 좀 더 클라이언트 친화적으로? 전달하고 싶었다.
구글링 결과 스택오버플로우에서 해결법을 찾을 수 있었다.
import { ArgumentMetadata, ParseUUIDPipe } from '@nestjs/common';
export class CustomParseUUIDPipe extends ParseUUIDPipe {
async transform(value: string, metadata: ArgumentMetadata): Promise<string> {
try {
return await super.transform(value, metadata);
} catch {
throw this.exceptionFactory('잘못된 id 형식입니다.');
}
}
}
이제 path 파라미터 id에 CustomParseUUIDPipe를 적용한다.
@Get(':id')
findOne(@Param('id', CustomParseUUIDPipe) id: string): Promise<Restaurant> {
return this.restaurantsService.findOne(id);
}
요청을 보내 결과를 확인한다.
{
"success": false,
"statusCode": 400,
"error": "Bad Request",
"message": "잘못된 id 형식입니다.",
"timestamp": "2023-10-31T15:52:09.291Z",
"path": "/restaurants/1"
}
현재 개발자가 원하는 메세지를 전달할 수 있는 기능이 nestjs 레포지토리에 pr된 상태라고 한다. 문제 없다면 이후 버전에서 커스텀 메세지를 전달할 수 있는 기능이 추가될 수도 있을 것 같다.