everyday com-eat
작성일
2024. 2. 21. 17:12
작성자
갱수터
728x90

1. 작성자 목록 가져오기 

...(생략)...
} else if(pathname === '/create') { //create일 때 실행
db.query(`SELECT * FROM topic`, function(error, topics) {
db.query('SELECT * FROM author', function(error2, authors) { //작성자 select 질의문 추가
console.log('authors : ', authors);
...(생략)...

 

 

 

2. 셀렉트박스 만들기

  • tag라는 빈 문자열 변수와 i라는 0따리 정수 인덱스 변수 만들어서 select 태그의 자식태그인 option 태그를 문자열로 묶어버려서 넣기
var tag = '';
var i = 0;
while(i < authors.length) {
tag += `<option value="${authors[i].id}">${authors[i].name}</option>`;
i++;
}
...(생략)...
`<form action="create_process" method="POST">
...(생략)...
<p>
<select name="author">${tag}</select>
</p>

 

생겻죠

 

 

 

 

3. template로 분리해주기

  • 속성 선언하기
},authorSelect:function(authors) {
var tag = '';
var i = 0;
while(i < authors.length) {
tag += `<option value="${authors[i].id}">${authors[i].name}</option>`;
i++;
}
return `
<p>
<select name="author">${tag}</select>
</p>
`;
}

 

 

  • 2번에서 <p></p>태그와 함께 만들었던 select 태그를 모두 지우고 그 자리에 authorSlect를 추가한다
${template.authorSelect(authors)}

 

 

 

 

 

4. 선택한 작성자로 글 생성시키기

  • 현재는 author_id가 '3'으로 고정되어 있음 => post.author로만 바꿔주면 됨!!
...(생략)...
var post = qs.parse(body);
db.query(`
INSERT INTO topic
(
title
,description
,created
,author_id
)
VALUES(
?
,?
,NOW()
,?
)`,
[post.title, post.description, post.author],
...(생략)...

 

 

 

 

 

5. 글 생성후 리다이렉션되는 글 상세조회 오류 수정

  • 글 상세조회 질의문에 작성자도 가져올 수 있게 작성자 테이블을 조인시켜준다
  • 화면에 작성자의 id값이 아닌 이름이 나올 수 있게 변수명인 topic으로 받아 name으로 접근해 준다
...(생략)...
db.query(`SELECT * FROM topic AS t LEFT JOIN author AS a ON t.author_id = a.id WHERE t.id = ?`
, [queryData.id], function(error2, topic) {
if(error2){
throw error2;
}
var title = topic[0].title;
var description = topic[0].description;
var list = template.list(topics);
var html = template.HTML(title, list,
`<h2>${title}</h2>
${description}
<p>by ${topic[0].name}</p>`,
...(생략)...

아오 여기 author 테이블 컬러명이랑 where절 컬럼앞에 테이블 안붙여서 계속 오류나고... 야마가 싸악
하지만 해냇죠

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6. 작성자 수정하기

  • 수정 화면에서 작성화면에서 template에서 만들어뒀던 셀렉트박스 가져와야하고
  • 그 셀렉트박스에 현재 작성자 저장해야 하고
  • 사용자가 수정하려는 작성자 받아야함
  • //고정해뒀던 author_id=3을 파라미터 ?로 수정하고,  사용자한테 받은 작성자값 넣어주기
} else if(pathname === '/update') { //update일 때 실행
...(생략)...
db.query(`SELECT * FROM topic WHERE id = ?`, [queryData.id], function(error2, topic) {
if(error2){
throw error2;
}
db.query(`SELECT * FROM author`, function(error2, authors) { //작성자 질의문 추가
...(생략)...
var html = template.HTML(t.title, list,
`<form action="/update_process" method="POST">
..(생략)...
<p>
<!-- 작성자 리스트, 현재 작성자-->
${template.authorSelect(authors, topic[0].author_id)}
</p>
...(생략)...`
} else if(pathname === '/update_process') { //update_process일 때 실행
...(생략)...
db.query('UPDATE topic SET title=?, description=?, author_id=? WHERE id=?',
[post.title, post.description, post.author, post.id], function(error, result) {