모두의 이력서

[모두의 이력서_4일차] 몽고디비 Model Schema 작성하기

개발조각 2023. 3. 28. 12:39
728x90
반응형

처음으로 혼자서 프론트부터 백까지 하는 프로젝트이다 보니 정확하지 않을 수 있습니다!

 

MongoDB Model & Schema


Medel

Medel은 Schema를 감싸주는 역할을 합니다.

 

Schema

이부분을 스키마라고 하며,

스키마는 하나하나의 정보들(필드)을 지정해 줄 수 있는 것을 말합니다.

 

만약 상품에 관련된 글을 작성해야될 경우 필드를 적어 정보를 지정해 줍니다.

  • 그 글을 작성하는 사람이 누구인지
  • 작성을 할 때 포스트의 이름 (type은 string, 최대 50글자)

 

User모델 만들기


1. models 폴더 생성, models 폴더 안에 User.ts 생성하기

back
|- models
	|- User.ts

 

2. 생성한 User.ts에 스키마 작성하기

*강의를 참고하고 작성한 거라 그대로 작성을 했습니다. 추후에 안 쓰는 필드는 삭제할 예정입니다!*

// models > User.ts
const mongoose = require("mongoose");

const userSchema = mongoose.Schena({
  name: {
    type: String,
    maxLength: 50
  },
  email: {
    type: String,
    trim: true, // test @test.com -> test@test.com (빈칸 제거해줌)
    unique: 1, // 똑같은 이메일을 쓰지 못하게
  },
  password: {
    type: String,
    minLength: 5
  },
  lastname: { // 나중에 지울예정
    type: String,
    maxLength: 50
  },

  role: { // 어떤 유저가 관리자가 될 수 있고 일반 유저가 될 수 있기 때문에 -> 관리자는 일반 유저도 관리
  // 나중에 지울예정
    type: Number, // 1: 관리자 0:일반유저
    default: 0
  },

  image: String, // 그사람에 해당되는 이미지
  token: {
    type: String // 유효성 관리
  },

  tokenExp: {// 토큰 유효기간 : 토큰을 사용할 수 있는 유효기간
    type: Number
  }
})

 

3. 스키마를 모델로 감싸주기

// models > User.ts
const mongoose = require("mongoose");

const userSchema = mongoose.Schena({
  name: {
    type: String,
    maxLength: 50,
  },
  ...필드들
});

const User = mongoose.model("User", userSchema); // (모델의 이름, 스키마)

 

4. 마지막으로 모델을 다른 파일에서도 쓰기 위해 export 해줍니다.

// models > User.ts
module.exports = { User }; // 만든 모델을 다른 파일에서도 사용하기 위해

 

소스 코드

// models > User.ts
const mongoose = require("mongoose");

const userSchema = mongoose.Schena({
  name: {
    type: String,
    maxLength: 50
  },
  email: {
    type: String,
    trim: true, // test @test.com -> test@test.com (빈칸 제거해줌)
    unique: 1, // 똑같은 이메일을 쓰지 못하게
  },
  password: {
    type: String,
    minLength: 5
  },
  lastname: { // 나중에 지울예정
    type: String,
    maxLength: 50
  },

  role: { // 어떤 유저가 관리자가 될 수 있고 일반 유저가 될 수 있기 때문에 -> 관리자는 일반 유저도 관리
  // 나중에 지울예정
    type: Number, // 1: 관리자 0:일반유저
    default: 0
  },

  image: String, // 그사람에 해당되는 이미지
  token: {
    type: String // 유효성 관리
  },

  tokenExp: {// 토큰 유효기간 : 토큰을 사용할 수 있는 유효기간
    type: Number
  }
})

const User = mongoose.model("User", userSchema);
module.exports = { User }; // 만든 모델을 다른 파일에서도 사용하기 위해

 

 

require → import


사실 타입스크립트로 작성하다 보니 require 말고 import로 작성해도 됩니다.

그래서 require를 import로 교체해 주었습니다.

import { Schema, model, Model } from "mongoose";

const userSchema = new Schema({
  name: {
    type: String,
    maxlength: 50,
  },
  email: {
    type: String,
    trim: true,
    unique: 1,
  },
  password: {
    type: String,
    minlength: 5,
  },
  lastname: {
    type: String,
    maxlength: 50,
  },
  role: {
    type: Number,
    default: 0,
  },
  image: String,
  token: {
    type: String,
  },
  tokenExp: {
    type: Number,
  },
});

export const User = model("User", userSchema);

 

 

참고자료


잘 설명이 되어 있어서 좋은데 3년 전꺼이고 ts가 아닌 js로 하다 보니 고쳐야 될 부분이 많습니다.

https://www.youtube.com/watch?v=c92IF8Dtu0o 

 

728x90
반응형