생활코딩

Coding Everybody

MySQL로 글생성 기능 구현

토픽 생활코딩 > WEB > WEB2 - Node.js > Node.js - MySQL

수업소개

MySQL을 이용해서 글 추가 기능을 구현하는 방법을 살펴보겠습니다. 

 

 

 

강의

 

 

 

소스코드

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 path = require('path');
var sanitizeHtml = require('sanitize-html');
var mysql = require('mysql');
var db = mysql.createConnection({
  host:'localhost',
  user:'root',
  password:'111111',
  database:'opentutorials'
});
db.connect();


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){
        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);
        });
      } else {
        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;
           }
          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}`,
            ` <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);
         })
      });
      }
    } else if(pathname === '/create'){
      db.query(`SELECT * FROM topic`, function(error,topics){
        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>
              <input type="submit">
            </p>
          </form>
          `,
          `<a href="/create">create</a>`
        );
        response.writeHead(200);
        response.end(html);
      });
    } else if(pathname === '/create_process'){
      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, 1], 
            function(error, result){
              if(error){
                throw error;
              }
              response.writeHead(302, {Location: `/?id=${result.insertId}`});
              response.end();
            }
          )
      });
    } else if(pathname === '/update'){
      fs.readdir('./data', function(error, filelist){
        var filteredId = path.parse(queryData.id).base;
        fs.readFile(`data/${filteredId}`, 'utf8', function(err, description){
          var title = queryData.id;
          var list = template.list(filelist);
          var html = template.HTML(title, list,
            `
            <form action="/update_process" method="post">
              <input type="hidden" name="id" value="${title}">
              <p><input type="text" name="title" placeholder="title" value="${title}"></p>
              <p>
                <textarea name="description" placeholder="description">${description}</textarea>
              </p>
              <p>
                <input type="submit">
              </p>
            </form>
            `,
            `<a href="/create">create</a> <a href="/update?id=${title}">update</a>`
          );
          response.writeHead(200);
          response.end(html);
        });
      });
    } else if(pathname === '/update_process'){
      var body = '';
      request.on('data', function(data){
          body = body + data;
      });
      request.on('end', function(){
          var post = qs.parse(body);
          var id = post.id;
          var title = post.title;
          var description = post.description;
          fs.rename(`data/${id}`, `data/${title}`, function(error){
            fs.writeFile(`data/${title}`, description, 'utf8', function(err){
              response.writeHead(302, {Location: `/?id=${title}`});
              response.end();
            })
          });
      });
    } else if(pathname === '/delete_process'){
      var body = '';
      request.on('data', function(data){
          body = body + data;
      });
      request.on('end', function(){
          var post = qs.parse(body);
          var id = post.id;
          var filteredId = path.parse(id).base;
          fs.unlink(`data/${filteredId}`, function(error){
            response.writeHead(302, {Location: `/`});
            response.end();
          })
      });
    } else {
      response.writeHead(404);
      response.end('Not found');
    }
});
app.listen(3000);

 

댓글

댓글 본문
  1. Dvlp
    https://jamong-icetea.tistory.com/134

    하드코딩 대신 ?라는 치환자를 사용해준거라네요
    대화보기
    • 감자
      22.12.19
    • 당당
      2022.11.08
    • toonfac
      220715 오전 11시 37분 완료
    • 화려하게간다
      잘동작한다고;;
    • 케굴
      2021-12-29
    • 협객베토벤
      INSERT INTO topic (title, description, created, author_id)
      VALUES(?, ?, NOW(), ?)`,
      [post.title, post.description, 1],
      이부분에서 물음표랑 배열이 같이들어가 있는게 이해가 안가는데요. 물음표 부분을 배열이 대체하는건가요? 어떻게?
    • labis98
      20210801 completed!!!
    • 이응종이
      2021.07.28 - nodejs mySQL 글 생성 기능 구현하기까지 완료
    • 비누왕자
      저가 이해한게 맞다면!
      WEB - Nodejs
      Template Literal 영상봐보시면 이해하실 수 있을것같아요
      대화보기
      • hanel_
        21.3.23
      • jeisyoon
        2021.03.10 MySQL 글 생성기능 구현 - OK
      • 김지호
        21 01 03
      • 생활둘기
        2021 1 2
      • 콜라
        20201021 완료
      • 황서형
        3:30 줄바꿈해도 에러가 나지 않는 방법을 알려주실 수 있나요?
      • Jonghwo Lee
        완료
      • 가톨릭대 컴공
        완료
      • 김재원123
        선생님..db랑 js연결시킬려고 node.js 공부하는데 죽을 것 같아요.. 그래도 점점 익숙해지는게 느껴져서 힘이 나네요 감사합니다!
      • eddylee123456
        완료
      • 준바이
        감사합니다.
      • 강다리
        흥미롭네요
      • 강다리
        들을수록 흥미롭네요
      • 굼벵이
        완료
      • jo_onc
        굳!!!
      • 아뭉
        now()가 현재시간 넣는거였군여!
      • 연수아빠
        수강 완료!!