23.2.1.1 인스턴스 메서드 만들기
우리는 두 개의 인스턴스 메서드를 만들어 보겠습니다. 첫 번째 메서드는 setPassword입니다. 이 메서드를 통해 비밀번호를 파라미터로 받아서 계정의 hashedPassword 값을 설정해 줍니다. 두 번째 메서드는 checkPassword입니다. 이 메서드는 파라미터로 받은 비밀번호가 해당 계정의 비밀번호와 일치하는지 검증해 줍니다.
src/models/user.js
import mongoose, { Schema } from 'mongoose'; import bcrypt from 'bcrypt'; const UserSchema = new Schema({ username: String, hashedPassword: String, }); UserSchema.methods.setPassword = async function(password) { const hash = await bcrypt.hash(password, 10); this.hashedPassword = hash; }; UserSchema.methods.checkPassword = async function(password) { const result = await bcrypt.compare(password, this.hashedPassword); return result; // true / false }; const User = mongoose.model('User', UserSchema); export default User;
인스턴스 메서드를 작성할 때는 화살표 함수가 아닌 function 키워드를 사용하여 구현해야 합니다. 함수 내부에서 this에 접근해야 하기 때문인데요. 여기서 this는 문서 인스턴스를 가리킵니다. 화살표 함수를 사용하면 this는 문서 인스턴스를 가리키지 못하게 됩니다.