목표
내손으로 직접 모델을 만들수있다.
준비
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
반응형
'Backend > node.js' 카테고리의 다른 글
Nodejs ejs 문서내 include, if 사용하는방법 초간단 (0) | 2022.06.08 |
---|---|
Autoincrement : mongoose-sequence 몽구스 자동증가 (0) | 2022.04.05 |
body-parser의 필요성(undefined 에러 해결) (0) | 2021.09.22 |
[express] pug 설치 및 사용방법(템플릿 그리기) (0) | 2021.09.17 |
[express] 미들웨어(+ 에러핸들링) (0) | 2021.09.07 |