본문 바로가기
프로그래밍 개발/NodeJs

Node.js and Mysql - Node.js 정리정돈

by Jinseok Kim 2021. 1. 11.
반응형

 

 

Node.js 정리정돈

 

 

 

 

 

1. DB 설정정보 정리정돈

 

이제 정리정돈의 첫 시작으로 mysql을 연동시켰던 코드를 따로 분리하여 파일을 만들고 그 안에 따로 만들어 놓는다. 그리고 모듈화를 통해 main.js와 연동시켜준다.

 

 

 

 

위와 같이 db.js 파일을 main.js에 연동시켜주었다.

 

 

 

 

 

 

 

2. Node.js 코드의 정리정돈 (topic)

 

 

topic.js라는 파일을 따로 만들어 mysql을 사용하여 node.js에 적용한 코드들을 그대로 따로 만든 파일에 옮긴 후 모듈화시켜 더욱 복잡하지 않게 하여 업무의 효율성을 더욱 높여주었다. 보기에도 깔끔하고 가독성이 좋아졌다.

 

 

main.js

var http = require('http');
var fs = require('fs');
var url = require('url');
var qs = require('querystring');
var template = require('./lib/template.js');
var db = require('./lib/db')
var topic = require('./lib/topic')

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){
        topic.home(request, response);
      } else {
        topic.page(request, response);
      }
    } else if(pathname === '/create'){
        topic.create(request, response);
     
    } else if(pathname === '/create_process'){
        topic.create_process(request, response);
      
    } else if(pathname === '/update'){
        topic.update(request, response);
      
    } else if(pathname === '/update_process'){
      topic.update_process(request, response);
    
    } else if(pathname === '/delete_process'){
      topic.delate_process(request, response);
    } else {
      response.writeHead(404);
      response.end('Not found');
    }
});
app.listen(3000);

 

 

topic.js

var db = require('./db')
var template = require('./template.js');
var url = require('url');
var qs = require('querystring');

exports.home = function(request, response){
db.query(`SELECT * FROM topic`, function(error,topics){
          var title = 'Welcome';
          var description = 'Hello, Node.js';
          var list = template.list(topics);
          var html = template.HTML(title, list,
            `<h2>${title}</h2>${description}`,
            `<a href="/create">create</a>`
          );
          response.writeHead(200);
          response.end(html);
        });
}

exports.page = function(request, response){
    var _url = request.url;
    var queryData = url.parse(_url, true).query;
    db.query(`SELECT * FROM topic`, function(error,topics){
         if(error){
           throw error;
         }
         db.query(`SELECT * FROM topic LEFT JOIN author ON topic.author_id=author.id WHERE topic.id=?`,[queryData.id], function(error2, topic){
           if(error2){
             throw error2;
           }
           console.log(topic);
          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>
            `,
            ` <a href="/create">create</a>
                <a href="/update?id=${queryData.id}">update</a>
                <form action="delete_process" method="post">
                  <input type="hidden" name="id" value="${queryData.id}">
                  <input type="submit" value="delete">
                </form>`
          );
          response.writeHead(200);
          response.end(html);
         })
      });
}


exports.create = function(request, response){
     db.query(`SELECT * FROM topic`, function(error,topics){
        db.query('SELECT * FROM author', function(error2, authors){
          var title = 'Create';
          var list = template.list(topics);
          var html = template.HTML(title, list,
            `
            <form action="/create_process" method="post">
              <p><input type="text" name="title" placeholder="title"></p>
              <p>
                <textarea name="description" placeholder="description"></textarea>
              </p>
              <p>
                ${template.authorSelect(authors)}
              </p>
              <p>
                <input type="submit">
              </p>
            </form>
            `,
            `<a href="/create">create</a>`
          );
          response.writeHead(200);
          response.end(html);
        });
      });
}

exports.create_process = function(request, response){
    var body = '';
      request.on('data', function(data){
          body = body + data;
      });
      request.on('end', function(){
          var post = qs.parse(body);
          db.query(`
            INSERT INTO topic (title, description, created, author_id) 
              VALUES(?, ?, NOW(), ?)`,
            [post.title, post.description, post.author], 
            function(error, result){
              if(error){
                throw error;
              }
              response.writeHead(302, {Location: `/?id=${result.insertId}`});
              response.end();
            }
          )
      });
}
exports.update = function(request, response){
    var _url = request.url;
    var queryData = url.parse(_url, true).query;
    db.query('SELECT * FROM topic', function(error, topics){
        if(error){
          throw error;
        }
        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 list = template.list(topics);
          var html = template.HTML(topic[0].title, list,
            `
            <form action="/update_process" method="post">
              <input type="hidden" name="id" value="${topic[0].id}">
              <p><input type="text" name="title" placeholder="title" value="${topic[0].title}"></p>
              <p>
                <textarea name="description" placeholder="description">${topic[0].description}</textarea>
              </p>
               <p>
               ${template.authorSelect(authors, topic[0].author_id)}
               </p>
              <p>
                <input type="submit">
              </p>
            </form>
            `,
            `<a href="/create">create</a> <a href="/update?id=${topic[0].id}">update</a>`
          );
          response.writeHead(200);
          response.end(html);
    });
        });
      });
}
exports.update_process = function(request, response){
    var body = '';
      request.on('data', function(data){
          body = body + data;
      });
      request.on('end', function(){
          var post = qs.parse(body);
         
          db.query('UPDATE topic SET title=?, description=?, author_id=? WHERE id=?',[post.title, post.description, post.author, post.id], function(error, result){
              response.writeHead(302, {Location: `/?id=${post.id}`});
              response.end();
            })
          });
}
exports.delate_process = function(request, response){
    var body = '';
      request.on('data', function(data){
          body = body + data;
      });
      request.on('end', function(){
          var post = qs.parse(body);
          db.query('DELETE FROM topic WHERE id = ?',[post.id], function(error, result){
              if(error){
                  throw error;
              }
              response.writeHead(302, {Location: `/`});
              response.end();
          });
          //var id = post.id;
          //var filteredId = path.parse(id).base;
          //fs.unlink(`data/${filteredId}`, function(error){
             
      });
}

 

 

 

 

 

 

반응형

댓글