프로젝트를 진행하면서 회원의 정보를 수정하는 기능이있었다.
닉네임과 이메일을 수정할 수 있었고 수정된 데이터만 body에 담아 넘기고 싶었다.
// mypage.js
async function update() {
let body = {}
if (isNicknameChanged) body.nickname = nicknameInput.value;
if (isEmailChanged) body.email = emailInput.value;
try {
await axios.patch(`/api/users`, body);
} catch (err) {
// error
}
}
body에 담아 넘어오는 회원의 정보를 UpdateUserDto로 유효성 검사를 하고있었다.
import { IsEmail, Matches } from 'class-validator';
export class UpdateUserDto {
@Matches(/^[\u1100-\u11FF\u3130-\u318F\uAC00-\uD7AFa-z\d]{2,15}$/, {
message: 'nickname',
})
nickname?: string;
@IsEmail({}, { message: 'email' })
email?: string;
}
하지만 닉네임과 이메일 두 속성 중 하나라도 없다면 에러를 반환한다.
따라서, 두 속성 중 하나가 존재하지 않아도 유효한 DTO로 인정하기 위해 @IsOptional() 데코레이터를 달아주었다.
ㅇㄹㅇㄹ