공부 저장소/Node.js

[생활코딩 Node.js] 13. 입력 페이지 만들기

tipsygypsy 2022. 8. 4. 20:28

입력 페이지 만들기

main.js에 제목과 내용을 입력받는 create 페이지를 신규 생성해 준다.

주소를 /create 로 지정할 것이므로, 우선 main.js 의 템플릿 부분에 /create 페이지로 이동하는 링크를 넣어 준다.

<body>
  <h1><a href="/">WEB</a></h1>
  ${list}
   <a href="/create">create</a>
  ${body}
  </body>

페이지 본문 부분을 위해 if(pathname=”/”)과 else 사이에 else if 조건을 하나 추가하고, 해당 부분에 form 태그 강의에서 만들었던 것과 동일한 html 코드를 넣어 준다.

else if(pathname === '/create'){
    fs.readdir('./data', function(error, filelist){
      var title = 'Web - Create';
      var list = templateList(filelist);
      var template = templateHTML(title, list, `
        <form class="" action="http://localhost:5000/process_create" method="post">
          <p><input type="text" name="title" placeholder="제목"></p>
          <p>
            <textarea name="description" rows="8" cols="60" placeholder="내용">
            </textarea>
          </p>
          <p>
            <input type="submit">
          </p>
        </form>
        `);

      response.writeHead(200);
      response.end(template);
      });
  }

입력칸에 가이드를 주기 위해 placeholder 옵션을 넣어서 각각 제목, 내용이라는 가이드 문구가 출력되도록 했다. 실행해 보면 다음과 같이 잘 뜬다.

 

 

전체 코드

더보기
    var http = require('http');
    var fs = require('fs');
    var url = require('url'); //url모듈 사용
    
    function templateHTML(title, list, body){
      return `
      <!doctype html>
      <html>
      <head>
      <title>WEB1 - ${title}</title>
      <meta charset="utf-8">
      </head>
      <body>
      <h1><a href="/">WEB</a></h1>
      ${list}
       <a href="/create">create</a>
      ${body}
      </body>
      </html>
      `;
    }
    
    function templateList(filelist){
      var list = '<ul>';
      var i = 0;
      while(i < filelist.length){
        list = list + `<li><a href="/?id=${filelist[i]}">${filelist[i]}</a></li>`
        i = i + 1
      }
      list = list + '</ul>';
      return list;
    }
    
    var app = http.createServer(function(request,response){
      var url_add = request.url;
      var queryData = url.parse(url_add, true).query;
      var pathname = url.parse(url_add, true).pathname;
    
      if(pathname === '/'){
        if(queryData.id === undefined){
          fs.readdir('./data', function(error, filelist){
            var title = 'Welcome';
            var description = 'Hello, Node.js';
            var list = templateList(filelist);
            var template = templateHTML(title, list, `<h2>${title}</h2>${description}`);
    
            response.writeHead(200);
            response.end(template);
          });
        } else {
          fs.readdir('./data', function(error, filelist){
            fs.readFile(`data/${queryData.id}`, 'utf-8', function(err, description){
              var title = queryData.id;
              var list = templateList(filelist);
              var template = templateHTML(title, list, `<h2>${title}</h2>${description}`);
    
              response.writeHead(200);
              response.end(template);
            });
          });
        }
      } else if(pathname === '/create'){
        fs.readdir('./data', function(error, filelist){
          var title = 'Web - Create';
          var list = templateList(filelist);
          var template = templateHTML(title, list, `
            <form class="" action="http://localhost:5000/process_create" method="post">
              <p><input type="text" name="title" placeholder="제목"></p>
              <p>
                <textarea name="description" rows="8" cols="60" placeholder="내용">
                </textarea>
              </p>
              <p>
                <input type="submit">
              </p>
            </form>
            `);
    
          response.writeHead(200);
          response.end(template);
          });
      } else {
        // 존재하지 않는 pathname일 경우 에러처리
        response.writeHead(404);
        response.end('Not found');
      }
    
    });
    app.listen(5000);