몽구스 스키마부터 모델 만들기 create mongoose schema and Model
본문 바로가기

Backend/node.js

몽구스 스키마부터 모델 만들기 create mongoose schema and Model

목표

내손으로 직접 모델을 만들수있다.

 

준비

1. 노드js express로 기본 서버단 세팅 및 서버생성

server 폴더를 만들고
1. npm init
2. touch index.js
3. npm install express
index.js안에 서버만들기

2. 몽구스 설치

npm i mongoose

3. [mongoose]>[schema]폴더안에 index.js생성

 

본격 스키마 만들기

스키마 예시는 다음과 같다.

user.js

const mongoose = require('mongoose')
const User = new mongoose.Schema({
    email:{type:String, required:true, unique:true},
    hashedPassword:{ type:String, required:true},
    salt:{type:String, required:true},
    createdAt: {type:Date, default:Date.now, required:true},
    nickname:{type:String, required:true,unique:true},
});

module.exports = User;

type는 String, Number, Date등 다양하고

default 초기값과 required 필수여부를 선택할수있다.

unique는 true가 되면 데이터베이스에 올라간이후로는 동일값을 등록 할 수 없게된다.

 

이러한 스키마들을 관리해주는 index.js

// 여러개의 스키마 관리
const Article = require('./article')//사용자가 작성한 게시글
const Board = require('./board')//게시판
const Comment = require('./comment')//게시글 안에 있는 댓글
const User = require('./user')//사용자 정보

module.exports = {
    Article,
    Board,
    Comment,
    User,
}

 

몽구스 모델 생성

[mogoose]>model.js 파일안에 몽고디비 연결

const mongoose = require('mongoose')
const schema = require('./schema')
const config = require('dotenv').config()

const db = mongoose.connection
const model = (()=>{
    db.on("error", console.error)
    db.on("open",()=>{
        console.log('Connecting mongodb!')
    })

    //Atlas mongodb cluster와 연결
    mongoose.connect(
        `mongodb+srv://${process.env.DB_ID}:${process.env.DB_PASSWORD}@cluster0.feldq.mongodb.net/myFirstDatabase?retryWrites=true&w=majority`
        ,{useNewUrlParser:true, useUnifiedTopology:true}
        )
    //DOTENV 테스트
    console.log(process.env.DB_ID)
    
    //스키마 연결
    const model = {};
    for(let key in schema){
        model[key] = mongoose.model(key, schema[key])
    }

    return model
})();

module.exports = model

 

백엔드 쿼리 만들기

[router] > user.js

router를 가져오고, User 모델을 가져와서 처리한다.

const express = require('express')
const router = express.Router()
const {User} = require('../mongoose/model')

//개별 개시글을 가져오는 라우트
router.post('/user/login', async (req, res) =>{
    const {email, password} = req.body
    const loginUser = await User.findOne({email:email})
    if(!loginUser){
        return res.send({
            status:404,
            error:true,
            msg:'there is no email address'
        })
    }
    const correctPassword = await loginUser.authenticate(password)
    if(!correctPassword){
        return res.send({
            status:404,
            error:true,
            msg:'password fail'
        })
    }

    req.session.is_logined = true
    req.session.nickname = loginUser.nickname
    req.session.email = loginUser.email
    
    res.send({
        //세션
        is_logined:req.session.is_logined,
        nickname:req.session.nickname,
        email:req.session.email,
        status:200,
        error:false, 
        msg:'login success',
    })
})

// add user
router.post('/user/create', async (req,res)=>{
    const{nickname, email, password} = req.body
    const newUser = await User({
        email,
        nickname,
        password
    }).save()

    console.log(newUser)
    res.send(newUser._id ? true : false)
})

//사용자정보변경
//사용자삭제
//프로필이미지추가

module.exports = router
반응형