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) {