mongoose에서 메서드 생성하기

less than 1 minute read

스키마 정의하기

일단은 데이터 타입이 어떻게 되는 지 스키마를 정의해 보겠습니다.

import mongoose, { Schema } from "mongoose";

const UserSchema = new Schema({
  username: String,
  cryptoPassword: String
});

const User = mongoose.model("User", UserSchema);
export default User;

보통 위와 같이 스키마를 설정할 수 있습니다.
이때 password를 그대로 넣는 것이 아니라 변경된 상태로 넣어야 한다고 가정해봅시다.
그럴 경우 메소드를 통해서 해당 역할을 수행할 수 있습니다.

인스턴스 메소드 만들기

(...)

UserSchema.methods.setPassword = function(password){
    const crypto = password + "123456789";
    this.cryptoPassword = crypto;
}

const User = mongoose.model('User', UserSchema);
(...)

인스턴스 내부의 this는 만들어진 인스턴스를 뜻합니다. 그래서 화살표함수를 사용하면 안됩니다.

const user = new User({
  username
});
user.setPassword(password);
await user.save();

위의 코드 처럼 사용하면 됩니다.

스태틱 메소드 만들기

UserSchema.statics.findByUsername = function(username) {
  return this.findOne({ username });
};

해당 함수는 유저네임을 통해서 아이디를 찾습니다.

// 사용할 땐
const existeduser = await User.findByUsername(username);

인스턴스 메소드 내부의 this는 생성된 인스턴스, 스태틱 메소드의 this는 User 모델을 나타냅니다.

Leave a comment