- 필요 소프트웨어
- 데이터를 저장할 MongoDB
- NodeJS에서 MongoDB를 사용할 수 있게 해주는 mongoose
- MongoDB 상태를 가시적으로 확인할 수 있게 해주는 Studio3T
- 초기화
- yarn 프로젝트 초기화
yarn init -y
- package.json에 모듈 사용 정의
"type": "module"
- 모듈 설치 `yarn add express mongoose
- 스키마 설계 및 모델 생성
import mongoose from 'mongoose';
const TodoSchema = new mongoose.Schema({
value: { type: String, required: true }
order: { type: Number, required: true }
doneAt: { type: Date }
});
export default mongoose.model('Todo', TodoSchema);
- 실행 파일에서 라우터 매핑
import TodosRouter from './routes/todos.router.js';
app.use('/api', [router, TodosRouter]);
- 라우터에서 API 작성
import express from 'express';
import Todo from '../schemas/todo.schema.js';
const router = express.Router();
// 저장 : POST API - await [모델].save();
router.post('/todos', async (req, res) => {
... //req.body에서 입력값 식별하기
const todo = new Todo( { value, order });
await todo.save();
return res.status(201).json({todo});
}
// 조회 : GET API - await [모델].find().exec();
router.get('/todos', async (req, res) => {
const todos = await Todo.find().sort('-order').exec();
return res.status(200).json({ todos });
});
// 수정 : patch API - findById, findOne, save
router.patch('/todos/:todoId', async (req, res) => {
const currentTodo = await Todo.findById(req.params.todoId).exec();
currentTodo.value = req.body.value;
await currentTodo.save();
return res.status(200).json({ });
}
// 삭제 : delete API - await [모델].deleteOne();
router.delete('/todos/:todoId', async (req, res) => {
const { todoId } = req.params;
await Todo.deleteOne({ _id:todoId });
return res.status(200).json({});
})
export default router;