아래 코드는 제가 nestjs를 사용하여 서버로 login할 때 아이디와 비밀번호를 검증하는 부분입니다.
const user: User = await this.userRepository.findUserByEmail(email);
if (!user) {
throw new BadRequestException("아이디 혹은 비밀번호가 틀렸습니다.");
}
const compared: boolean = await bcrypt.compare(password, user.password);
if (!compared) {
throw new BadRequestException("아이디 혹은 비밀번호가 틀렸습니다.");
}
되게 직관적이지만 조건문에서 조건이 일치할 때(즉 검증 로직에서 falsy한 값을 받을 때) 에러를 던지게 되는데 그 에러가 똑같은 모습이라 한번만 써도 될 것을 두 번 사용하여 보기가 껄끄럽게 된 것 같습니다. 만약 아이디와 비밀번호를 한번에 얻어오고 조건문을 사용하려면 user변수에 값이 있어야(즉 email로 유저를 찾게 되어야만) user.password 변수를 사용할 수 있어서 이러한 방법은 불가능해보입니다.
const user = await this.userRepository.findUserByEmail(email);
const compared = user && await bcrypt.compare(password, user.password);
if (!compared) {
throw new BadRequestException("아이디 혹은 비밀번호가 틀렸습니다.");
}
user가 falsy하다면 compared는 false로 판정되고 뒤의 식을 실행하지 않습니다. 반대로 말하면 뒤의 식을 실행하려면 앞의 user가 falsy하지 않아야 한다는 조건이 성립해야 한다는 뜻으로 받아들일 수 있습니다.
2개의 좋아요
ⓒ 자바스크립트 개발자 포럼 | 상호명 및 호스팅 서비스 제공 : 손수 | 대표 : 정현주 | 경기도 화성시 동탄장지천3길 10 | 사업자 등록번호 : 365-58-00109 | 통신판매업신고 : 2024-화성동탄-1006