아래 코드는 제가 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 변수를 사용할 수 있어서 이러한 방법은 불가능해보입니다.
여러분들은 이런 코드가 어떻게 보이시나요?