지난 포스트 : ToDo List 개발과정 1 - SetUp & Table 생성 및 연결
코드 링크 (Github)
Tools
Node.js + JavaScript + MySql + Sequelize
// 사용자 등록 시
if (!email) {
return alert('이메일을 입력하세요');
}
const reg_email = /^([0-9a-zA-Z_\.-]+)@([0-9a-zA-Z_-]+)(\.[0-9a-zA-Z_-]+){1,2}$/;
if(!reg_email.test(email)) {
return alert('이메일 형식이 아닙니다.');
}
if (!name) {
return alert('이름을 입력하세요');
}
if (!age) {
return alert('나이를 입력하세요');
}
// localhost:8080/members/
router.route('/')
.post(async (req, res, next) => {
try {
//이메일 중복 처리
const email = req.body.email;
const exUser = await Member.findAll({ where: { email : email } });
if (exUser.length >0) {
console.log("이메일이 중복됩니다.");
res.status(201);
}else{
console.log("이메일 사용 가능합니다.");
//DB에 저장
const members = await Member.create({
email: req.body.email,
age: req.body.age,
name: req.body.name,
}); // INSERT
console.log(members);
res.status(201).json(members);
}
} catch (err) {
console.error(err);
next(err);
}
});
// localhost:8080/members/
router.route('/')
.get(async (req, res, next) => {
try {
const members = await Member.findAll(); //회원 전체 조회
res.json(members);
console.log("200 : 회원 리스트가 정상적으로 조회되었습니다.")
} catch (err) {
console.error(err);
next(err);
}
})
// 사용자 로딩
async function getUser() {
try {
const res = await axios.get('/members');
const members = res.data;
console.log(members);
const tbody = document.querySelector('#user-list tbody');
tbody.innerHTML = '';
members.map(function (member) {
// 로우 셀 추가
const row = document.createElement('tr');
row.addEventListener('click', () => {
console.log("row clicked!");
getTodo();
});
let td = document.createElement('td');
td.textContent = member.id;
row.appendChild(td);
td = document.createElement('td');
td.textContent = member.email;
row.appendChild(td);
td = document.createElement('td');
td.textContent = member.age;
row.appendChild(td);
td = document.createElement('td');
td.textContent = member.name;
row.appendChild(td);
...
const edit = document.createElement('button');
edit.textContent = `회원${member.id} 수정`;
edit.addEventListener('click', async () => { // 수정 클릭 시
// 초기 값을 기존 값으로 넣어 미입력을 방지, 나이는 숫자만 입력 받도록 처리
const newAge = parseInt(prompt('변경할 나이을 입력하세요', `${member.age}`));
if (!newAge) { // 내용 없을 경우, 숫자 아닌 경우
return alert('변경을 취소합니다.');
}
const newName = prompt('변경할 이름을 입력하세요', `${member.name}`);
if (!newName) {
return alert('변경을 취소합니다.');
}
try {
await axios.patch(`/members/${member.id}`, { age: newAge , name: newName});
getUser(); //함수 재 호출 (새로고침)
} catch (err) {
console.error(err);
}
});
const retrieve = document.createElement('button');
retrieve.textContent = `회원${member.id} 의 TODO 조회`;
retrieve.addEventListener('click', async () => { // 수정 클릭 시
getTodo();
});