Node.js

App - 글수정 - 수정 링크 생성

수업소개

글 수정 기능을 구현하기 위해서 수정 링크를 추가하는 법을 살펴봅니다. 

 

 

 

강의

 

 

 

소스코드

syntax/main.js (변경사항)

var http = require('http');
var fs = require('fs');
var url = require('url');
var qs = require('querystring');

function templateHTML(title, list, body, control){
  return `
  <!doctype html>
  <html>
  <head>
    <title>WEB1 - ${title}</title>
    <meta charset="utf-8">
  </head>
  <body>
    <h1><a href="/">WEB</a></h1>
    ${list}
    ${control}
    ${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 = request.url;
    var queryData = url.parse(_url, true).query;
    var pathname = url.parse(_url, 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}`,
            `<a href="/create">create</a>`
          );
          response.writeHead(200);
          response.end(template);
        });
      } else {
        fs.readdir('./data', function(error, filelist){
          fs.readFile(`data/${queryData.id}`, 'utf8', function(err, description){
            var title = queryData.id;
            var list = templateList(filelist);
            var template = templateHTML(title, list,
              `<h2>${title}</h2>${description}`,
              `<a href="/create">create</a> <a href="/update?id=${title}">update</a>`
            );
            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 action="http://localhost:3000/create_process" method="post">
            <p><input type="text" name="title" placeholder="title"></p>
            <p>
              <textarea name="description" placeholder="description"></textarea>
            </p>
            <p>
              <input type="submit">
            </p>
          </form>
        `, '');
        response.writeHead(200);
        response.end(template);
      });
    } else if(pathname === '/create_process'){
      var body = '';
      request.on('data', function(data){
          body = body + data;
      });
      request.on('end', function(){
          var post = qs.parse(body);
          var title = post.title;
          var description = post.description;
          fs.writeFile(`data/${title}`, description, 'utf8', function(err){
            response.writeHead(302, {Location: `/?id=${title}`});
            response.end();
          })
      });
    } else {
      response.writeHead(404);
      response.end('Not found');
    }
});
app.listen(3000);

댓글

댓글 본문
작성자
비밀번호
  1. 호두
    고맙습니다.
  2. 권문수
    크헑... 어렵네요;;;
  3. 나마코엘
    갑종..
  4. popinbompin
    앜ㅋㅋ 너무 급작스럽게 끝났네여 이번강의
  5. 윤재근
    소스 복붙 해도 업데이트가 안나오는 이유가 무엇일까요? ㅠㅠ
  6. 일단시작하고본다
    흑흑 감사합니다
  7. 삼고잉
    첫번째 훑기
  8. Hyungnam Kim
    안녕하세요.

    올려주신 강좌 잘 보고 있으며 항상 감사하게 생각합니다.

    다름이 아니라 현재 codeanywhere를 통해 해당 강좌 따라가는 중

    생성 및 수정 후 redirect 하였을 때 'This Container is currently unaccessible.' 페이지가 나오는건

    해당 사이트 부분에 대한 문제인건가요?

    해당 페이지에서 새로고침시에는 다시 잘 나옵니다.
  9. 코따(유투브이름)
    한마디로 대단하십니다.....부럽구요
  10. Gimme_Gsuit
    감사합니다!!.
  11. 감사합니다.
  12. Seo Yun Seok Tudoistube
    어떻게 쉽고 잘 꾸밀 수 있을까에 대한 고민은 개발을 공부하는 고민과는 다르게 어려운거 같습니다.
    부트스트랩4에서 폰트, 아이콘 쓰는 방법이 달라진거 같고, 미디어쿼리로 CSS Grid 랑 부트스트랩을 어떻게
    잘 쓸 수 있을까에 대한 고민은 공부와 감각 모두 필요한거 같아 이런 강의도 있으면 좋겠습니다.
    감사합니다!
graphittie 자세히 보기