언어&프레임워크/Node.js

글 수정, 삭제 구현(node.js, mysql)

밍풀 2023. 1. 29. 00:33
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
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: '127.0.0.1',
  user: 'nodejs',
  password: '111111',
  database: 'open'
});
 
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);
 
      });
 
      //db.end();
    } 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>${topic[0].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') {
    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 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>
                <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);
      });
    });
 
  } else if (pathname === '/update_process') {
    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=1 WHERE id=?',
 [post.title, post.description, post.id], function(error, result){
        response.writeHead(302, {Location: `/?id=${post.id}`});
        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);
      db.query(`DELETE FROM topic WHERE id=?`,[post.id],function(error,result){
        if(error){
          throw error;
        }
        response.writeHead(302, { Location: `/` });
        response.end();
 
      });
    });
  } else {
    response.writeHead(404);
    response.end('Not found');
  }
});
app.listen(3000);
 
cs