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 });
});