일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- ui탬플릿
- Typesciprt
- Styled Components
- react
- 관리자페이지
- Ajax
- 배포
- register
- stock option
- Token
- 파생상품평가
- RCPS
- 마이페이지
- 회원가입로직
- 로그인 로직
- 달력 라이브러리
- userManagement
- 밸류즈 홈페이지
- MRC
- mypage
- 로그인
- 이미지 업로드
- Update
- 공통메서드
- 캘린더 라이브러리
- 빌드 및 배포
- jsonwebtoken
- 밸류즈
- 인증처리
- 스프링시큐리티
- Today
- Total
I T H
[MySchedule project] 16. React-big-Calendar 사용하기 (2) 본문
지난 챕터에서는 캘린더 라이브러리 사용하기에 대한 frontend 로직을 설명했는데,
이번 시간에는 backend로직을 통해 캘린더를 완성해보겠다.
Backend
[ src / models / Schedule.js]
1. 스키마 만들기
- 캘린더에 대한 데이터를 저장할 스키마를 만든다.
- 여기서 userId는 회원가입의 id처럼 unique한 값을 가지면 안된다. 중복된 값을 가져야함.
예를 들어서 "사용자아이디: A, 제목: B", "사용자아이디:A, 제목:C" 와 같이 중복을 허용해야됨. 만약 unique값을 넣으면 바로 에러가 뜰 것이다.
- calender의 타입은 스케줄의 주제에 맞게 분배하기 위해서 넣어주었고, start는 스케줄의 시작시간, end는 스케줄의 종료시간이다. 그리고 title은 스케줄의 내용을 담는다.
const { default: mongoose } = require("mongoose");
const bcrypt = require("bcryptjs");
const mySchedule = mongoose.Schema({
calenderType: {
// 0 : 스케줄 , 1: 식비, 2: 운동
type: Number,
default: 0,
},
start: {
type: Date,
},
end: {
type: Date,
},
title: {
type: String,
trim: true,
},
userId: {
type: String,
maxLength: 20,
trim: true,
},
});
//여기서 userId는 중복되기에 unique를 없애줌.
const MySchedule = mongoose.model("MySchedule", mySchedule);
module.exports = MySchedule;
[ index.js]
- route 추가
app.use("/mySchedule", require("./routes/mySchedule"));
[ src / routes / mySchedule.js]
1. 캘린더 데이터 입력
- 전달받은 스케줄의 데이터를 db에 저장하는 작업이다.
- save()메서드를 통해 저장.
2. 캘린더 데이터 조회
- 조회의 경우의수는 2가지로 구분했다. 메인페이지에서는 전체조회, 캘린더의 타입이 정해져있을때는 각 주제에 맞게 조회할수 있도록 조건식을 처리하였음. 파라미터로 아이디와 타입을 받아온다.
- 데이터가 1개가 아닐확률이 높기 때문에 조회한 데이터는 배열로 받아 frontend로 전달한다.
3. 캘린더 데이터 업데이트
- userId와 start, end, 캘린더의 타입에 따라서 데이터가 달라지기 때문에 4개의 조건에 대한 조회를 먼저하고, title부분을 업데이트한다.
- 조건에 맞는 하나의 데이터를 조회하고 나서 업데이트를 하기 위해 findOneAndUpdate() 메서드를 사용했다.
4. 캘린더 데이터 삭제
- 캘린더 업데이트와 조건식의 코드는 같고, 한개의 데이터를 삭제하기 위해 deleteOne() 메서드를 사용했다.
const express = require("express");
const MySchedule = require("../models/Schedule");
const router = express.Router();
//myschedule Data insert
router.post("/dataInsert", async (req, res, next) => {
// console.log("---------insert-----------");
// console.log(req.body);
try {
// 배열로 받는다면
// for (let index in req.body) {
// console.log(index);
// console.log(req.body[index]);
// }
const mySchedule = new MySchedule(req.body);
await mySchedule.save();
return res.sendStatus(200);
} catch (error) {
next(error);
}
});
//myschedule Data select
router.post("/dataSelect", async (req, res, next) => {
console.log(req.body.calenderType);
let calenderData = [];
try {
//캘린더의 타입이 있을때는 주제에 맞게 각각 조회
if (req.body.calenderType !== "" && req.body.calenderType !== "") {
calenderData = await MySchedule.find({
userId: req.body.userId,
calenderType: req.body.calenderType,
});
}
//메인페이지에서 전체 조회
if (req.body.calenderType === undefined) {
calenderData = await MySchedule.find({
userId: req.body.userId,
});
}
console.log("======select==========");
console.log(calenderData);
return res.status(200).json([calenderData]);
} catch (error) {
next(error);
}
});
//myschedule Data update
router.post("/calenderDataUpdate", async (req, res, next) => {
console.log(req.body);
let calenderData = {};
try {
calenderData = await MySchedule.findOneAndUpdate(
{
userId: req.body.userId,
start: req.body.start,
end: req.body.end,
calenderType: req.body.calenderType,
},
{ title: req.body.title },
{ new: true }
);
return res.status(200).json(calenderData);
} catch (error) {
next(error);
}
});
//myschedule Data delete
router.post("/calenderDataDelete", async (req, res, next) => {
console.log("============delete");
console.log(req.body);
try {
await MySchedule.deleteOne({
userId: req.body.userId,
start: req.body.start,
end: req.body.end,
calenderType: req.body.calenderType,
});
return res.json({ deleteYn: true });
} catch (error) {
next(error);
}
});
module.exports = router;
[결과화면]



'React + Node.js' 카테고리의 다른 글
[MySchedule project] 18. exceljs를 사용한 엑셀 다운로드 구현 (0) | 2024.02.22 |
---|---|
[MySchedule project] 17. styled components 사용하기 / Footer (0) | 2024.02.20 |
[MySchedule project] 15. React-big-Calendar 사용하기 (1) (0) | 2024.02.20 |
[MySchedule project] 14. 카카오 로그아웃 or unlink 로직 (0) | 2024.02.12 |
[MySchedule project] 13. 카카오 로그인 구현 (2) - Backend (0) | 2024.02.12 |