ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Node.js - POST방식으로 전송된 데이터 받기(생활코딩)
    Node.js 2020. 8. 23. 16:08
    var http = require('http');
    var fs = require('fs');
    var url = require('url');
    var qs = require('querystring');
    
    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 += `<li><a href="/?id=${filelist[i]}">${filelist[i]}</a></li>`
        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;
        console.log(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><p>${description}</p>`);
              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><p>${description}</p>`);
                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/process_create" method="post">
                <p>
                  <input type="text" name="title" placeholder="title">
                </p>
                <p>
                  <textarea name="description"></textarea>
                </p>
                <p>
                  <input type="submit">
                </p>
              </form>
              `
             );
            response.writeHead(200);
            response.end(template);
          });
        } else if(pathname === '/process_create'){
          var body = '';
          // post방식으로 데이터 처리할 때,
          // 데이터가 너무 많을 경우 대비한 방식(콜백으로 처리)
          request.on('data', function(data){
            // body 데이터에 콜백 실해 시마다 data추가
            body += data;
          });
          // 더 이상 들어올 정보 없을 때,
          // 'end'가 있는 request.on()실행
          request.on('end', function(){
            var post = qs.parse(body);
            var title = post.title;
            var description = post.description;
            console.log(post.title);
          });
          response.writeHead(200);
          response.end('Success');
        } else{
          response.writeHead(404);
          response.end('Not found');
        }
    });
    app.listen(3000);
    

Designed by Tistory.