반응형
이 포스팅은 아래의 강의를 참고한 개인 정리본이니 강의를 통해 공부하시는 것을 추천드립니다.
1. Board Schema 정의
const { Schema, model, Types } = require('mongoose');
const BoardSchema = new Schema({
title : {type:String, required:true}, // 제목
content : {type:String, required:true}, // 내용
isUse : {type:Boolean, required:true, default:true}, // 사용 여부(true:사용, false:삭제)
user : {type:Types.ObjectId, required:true, ref:"user"}, // User.js의 Schema 정의 이후 model 을 생성할 때 들어가는 변수를 넣어줘야함
},
{timestamps: true});
const Board = model('board', BoardSchema);
module.exports = {Board};
2. BoardRouter 정의
const {Router, response} = require('express');
const boardRouter = Router();
const {Board} = require('../models/Board');
const {User} = require('../models/User');
const {isValidObjectId} = require('mongoose');
// Board 데이터 추가
boardRouter.post('/', async(request, response) => {
try{
const { title, content, isUse, userId } = request.body;
if(typeof title != "string" )
response.status(400).send({error:"title을 입력하세요."});
if(typeof content != "string" )
response.status(400).send({error:"content을 입력하세요."});
if(isUse && typeof isUse != "boolean" )
response.status(400).send({error:"isUse 입력하세요."});
if(!isValidObjectId(userId))
response.status(400).send({error: "userId를 제대로 입력해주세요."});
let user = await User.findById(userId);
if(user == null)
response.status(400).send({error: "해당 유저가 존재하지 않습니다."});
let board = new Board({... request.body, user:userId});
await board.save();
return response.send({board});
} catch(err){
console.log(err);
response.status(500).send({error:err.message});
}
});
// Board 데이터 전체 조회
boardRouter.get('/', async(request, response) => {
try{
let board = await Board.find({});
return response.send({board});
} catch(err){
console.log(err);
response.status(500).send({error:err.message});
}
});
// Board 특정 데이터만 조회(_id 이용)
boardRouter.get('/:boardId', async(request, response) => {
try{
const {boardId} = request.params;
if(!isValidObjectId(boardId))
response.status(400).send({error: "board를 제대로 입력해주세요."});
let board = await Board.findOne({_id:boardId});
response.send({board});
} catch(err){
console.log(err);
response.status(500).send({error:err.message});
}
});
// Board 특정 데이터 수정
boardRouter.put('/:boardId', async(request, response) => {
try{
const {title, content} = request.body;
if(typeof title != "string" )
response.status(400).send({error:"title을 입력하세요."});
if(typeof content != "string" )
response.status(400).send({error:"content을 입력하세요."});
const {boardId} = request.params;
if(!isValidObjectId(boardId))
response.status(400).send({error: "boardId를 제대로 입력해주세요."});
const board = await Board.findOneAndUpdate({_id:boardId}, {title, content}, {new : true});
return response.send({board});
} catch(err){
console.log(err);
response.status(500).send({error:err.message});
}
});
// put : 전체 수정, patch : 부분 수정
// Board 특정 데이터의 isUse 필드만 수정
boardRouter.patch('/:boardId/isUse', async(request, response) => {
try{
const {boardId} = request.params;
if(!isValidObjectId(boardId))
response.status(400).send({error: "boardId를 제대로 입력해주세요."});
const {isUse} = request.body;
if(typeof isUse != "boolean")
response.status(400).send({error: "isUse boolean형으로 입력해주세요."});
const board = await Board.findByIdAndUpdate(boardId, {isUse}, {new: true});
return response.send({board});
} catch(err){
console.log(err);
response.status(500).send({error:err.message});
}
});
module.exports = {boardRouter};
3. BoardRouter 를 서버 메인 js에서 사용할 수 있도록 설정
const express = require('express');
const app = express();
const mongoose = require('mongoose');
const {userRouter} = require('./routes/userRoute'); // userRouter 불러오기
const {boardRouter} = require('./routes/boardRoute'); // boardRouter 불러오기
...
const server = async() => {
try{
...
// URL이 /user로 들어온 경우 userRouter로 연결
app.use('/user', userRouter);
// URL이 /board로 들어온 경우 boardRouter로 연결
app.use('/board', boardRouter);
}catch(err){
console.log(err);
}
}
server();
4. 앞에서 받은 파라미터도 같이 사용하는 방법
Router를 받을 때, mergeParams를 true로 설정하면 된다.
아래의 소스에서는 boardRouter로 들어간 요청이 다시 commentRouter로 들어갔을 때
commentRouter에서 boardRouter에서 정의한 boardId를 사용할 수 있도록 하는 소스이다.
5. model, Route 파일들을 한 군데에 묶어 관리하기 편하게 하기
1) model 내의 파일들을 하나의 파일 안에 넣어서 사용하기
2) routes 내의 파일들을 하나의 파일 안에 넣어서 사용하기
프로젝트의 구조가 아래와 같을 때
이렇게 routes 폴더까지만 기입해줘도 index.js는 자동으로 호출한다.
반응형
'DB > MongoDB' 카테고리의 다른 글
[MongoDB 기초부터 실무까지] 8. 콜렉션 안에 다른 콜렉션 한 번에 저장해보기 (0) | 2022.08.17 |
---|---|
[MongoDB 기초부터 실무까지] 7. 임시 데이터 생성 및 axios 사용해보기 (0) | 2022.08.13 |
[MongoDB 기초부터 실무까지] 5. Node.js로 MongoDB 접근해보기 (0) | 2022.08.01 |
[MongoDB 기초부터 실무까지] 4. Node.js 동기 프로그래밍(Callback, Promise, Await) (0) | 2022.07.27 |
[MongoDB 기초부터 실무까지] 3. Node.js 환경 세팅 및 REST API 만들기 (0) | 2022.07.25 |