Create, Read 구현하기

윤태규·2023년 12월 7일
  1. [할 일 메모 사이트] - Create, Read 구현하기
    1) [할 일 메모 사이트] - Create, Read API 정리하기
    2) 할 일 Router 추가하기
    // /routes/todos.router.js

import express from 'express';

const router = express.Router();

export default router;
// /app.js

import express from 'express';
import connect from './schemas/index.js';
import TodosRouter from './routes/todos.router.js';

const app = express();
const PORT = 3000;

connect();

// Express에서 req.body에 접근하여 body 데이터를 사용할 수 있도록 설정합니다.
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// static Middleware, express.static()을 사용하여 정적 파일을 제공합니다.
app.use(express.static('./assets'));

const router = express.Router();

router.get('/', (req, res) => {
return res.json({ message: 'Hi!' });
});

// /api 주소로 접근하였을 때, router와 TodosRouter로 클라이언트의 요청이 전달됩니다.
app.use('/api', [router, TodosRouter]);

app.listen(PORT, () => {
console.log(PORT, '포트로 서버가 열렸어요!');
});
3) 할 일 등록 API 만들기
// routes/todos.router.js

import Todo from '../schemas/todo.schema.js';

router.post('/todos', async (req, res) => {
// 클라이언트에게 전달받은 value 데이터를 변수에 저장합니다.
const { value } = req.body;

// Todo모델을 사용해, MongoDB에서 'order' 값이 가장 높은 '해야할 일'을 찾습니다.
const todoMaxOrder = await Todo.findOne().sort('-order').exec();

// 'order' 값이 가장 높은 도큐멘트의 1을 추가하거나 없다면, 1을 할당합니다.
const order = todoMaxOrder ? todoMaxOrder.order + 1 : 1;

// Todo모델을 이용해, 새로운 '해야할 일'을 생성합니다.
const todo = new Todo({ value, order });

// 생성한 '해야할 일'을 MongoDB에 저장합니다.
await todo.save();

return res.status(201).json({ todo });
});

export default router;
4) 데이터 유효성 검사 기능 추가하기
// /routes/todos.router.js

router.post('/todos', async (req, res) => {
// 클라이언트에게 전달받은 value 데이터를 변수에 저장합니다.
const { value } = req.body;

// value가 존재하지 않을 때, 클라이언트에게 에러 메시지를 전달합니다.
if (!value) {
return res
.status(400)
.json({ errorMessage: '해야할 일 데이터가 존재하지 않습니다.' });
}

// Todo모델을 사용해, MongoDB에서 'order' 값이 가장 높은 '해야할 일'을 찾습니다.
const todoMaxOrder = await Todo.findOne().sort('-order').exec();

// 'order' 값이 가장 높은 도큐멘트의 1을 추가하거나 없다면, 1을 할당합니다.
const order = todoMaxOrder ? todoMaxOrder.order + 1 : 1;

// Todo모델을 이용해, 새로운 '해야할 일'을 생성합니다.
const todo = new Todo({ value, order });

// 생성한 '해야할 일'을 MongoDB에 저장합니다.
await todo.save();

return res.status(201).json({ todo });
});

export default router;
5) 할 일 목록 조회 API 만들기
// routes/todos.router.js

router.get('/todos', async (req, res) => {
// Todo모델을 이용해, MongoDB에서 'order' 값이 가장 높은 '해야할 일'을 찾습니다.
const todos = await Todo.find().sort('-order').exec();

// 찾은 '해야할 일'을 클라이언트에게 전달합니다.
return res.status(200).json({ todos });
});

profile
끝까지 가자

0개의 댓글