지난 포스트 : ToDo List 개발과정 1 - SetUp & Table 생성 및 연결
지난 포스트 : ToDo List 개발과정 2 - 회원 생성/조회/수정
코드 링크 (Github)
Tools
Node.js + JavaScript + MySql + Sequelize
router.post('/', async (req, res, next) => {
try {
const todo = await Todo.create({ //INSERT
member: req.body.id,
content: req.body.content,
isCompleted: req.body.isCompleted
});
console.log(todo);
res.status(201).json(todo);
} catch (err) {
console.error(err);
next(err);
}
});
// todo 등록 시
document.getElementById('comment-form').addEventListener('submit', async (e) => {
e.preventDefault();
const id = e.target.userid.value;
const content = e.target.content.value;
const isCompleted = e.target.isCompleted.checked;
if (!id) {
return alert('아이디를 입력하세요');
}
if (!content) {
return alert('할일을 입력하세요');
}
try {
await axios.post('/todos', { id, content, isCompleted });
getTodo();
} catch (err) {
console.error(err);
}
e.target.userid.value = '';
e.target.comment.value = '';
e.target.isCompleted.value = false;
});
router.route('/:id')
.get(async (req, res, next) => {
try {
const todos = await Todo.findAll({
include: {
model: Member,
where: { id: req.params.id },
},
});
console.log(todos);
res.json(todos);
} catch (err) {
console.error(err);
next(err);
}
})
router.route('/:id')
.patch(async (req, res, next) => {
try {
const result = await Todo.update({
isCompleted: req.body.isCompleted,
}, {
where: { id: req.params.id },
});
res.json(result);
} catch (err) {
console.error(err);
next(err);
}
})
const edit = document.createElement('button');
edit.textContent = '수정';
edit.addEventListener('click', async () => { // 수정 클릭 시
const newCompleted = confirm('완료는 확인, 미완료는 취소를 클릭하세요.');
try {
await axios.patch(`/todos/${todo.id}`, { isCompleted: newCompleted });
getTodo();
} catch (err) {
console.error(err);
}
});
router.route('/:id')
.delete(async (req, res, next) => {
try {
const result = await Todo.destroy({ where: { id: req.params.id } });
res.json(result);
} catch (err) {
console.error(err);
next(err);
}
});
const remove = document.createElement('button');
remove.textContent = '삭제';
remove.addEventListener('click', async () => { // 삭제 클릭 시
try {
await axios.delete(`/todos/${todo.id}`);
getTodo();
} catch (err) {
console.error(err);
}
});
router.route('/:id')
//할 일 단건 조회
.get(async (req, res, next) => {
try {
const id = req.params.id;
const todos = await Todo.findOne({
include: {
model: Member,
where: { id: req.params.id },
},
});
console.log(todos);
res.json(todos);
} catch (err) {
console.error(err);
next(err);
}
})
router.route('/')
.get(async (req, res, next) => {
try {
const resTodos = await Todo.findAll({
include: {
model: Member,
where: { },
},
});
res.json(resTodos);
} catch (err) {
console.error(err);
next(err);
}
})
// 전체 TODO 로딩
async function getTodo() {
try {
const res = await axios.get(`/todos`);
const todos = res.data;
const tbody = document.querySelector('#comment-list tbody');
tbody.innerHTML = '';
todos.map(function (todo) {
console.log("메롱=>"+JSON.stringify(todo));
// 로우 셀 추가
const row = document.createElement('tr');
let td = document.createElement('td');
td.textContent = todo.id;
row.appendChild(td);
td = document.createElement('td');
td.textContent = todo.Member.email;
row.appendChild(td);
td = document.createElement('td');
td.textContent = todo.Member.name;
row.appendChild(td);
td = document.createElement('td');
td.textContent = todo.content;
row.appendChild(td);
td = document.createElement('td');
td.textContent = todo.isCompleted ? '⭕' : '❌';
row.appendChild(td);
const edit = document.createElement('button');
edit.textContent = '수정';
edit.addEventListener('click', async () => { // 수정 클릭 시
const newCompleted = confirm('완료는 확인, 미완료는 취소를 클릭하세요.');
try {
await axios.patch(`/todos/${todo.id}`, { isCompleted: newCompleted });
getTodo();
} catch (err) {
console.error(err);
}
});
const remove = document.createElement('button');
remove.textContent = '삭제';
remove.addEventListener('click', async () => { // 삭제 클릭 시
try {
await axios.delete(`/todos/${todo.id}`);
getTodo();
} catch (err) {
console.error(err);
}
});
// 버튼 추가
td = document.createElement('td');
td.appendChild(edit);
row.appendChild(td);
td = document.createElement('td');
td.appendChild(remove);
row.appendChild(td);
tbody.appendChild(row);
});
} catch (err) {
console.error(err);
}
}