Node.js & MySQL 생활코딩
https://www.youtube.com/watch?v=1ee5vAou2Y0&list=PLuHgQVnccGMAicFFRh8vFFFtLLlNojWUh
https://engineering.linecorp.com/ko/blog/pm2-nodejs/
PM2를 활용한 Node.js 무중단 서비스하기
이 글은 마이크로소프트웨어 393호에 기고된 글입니다. 자바스크립트는 가장 널리 사용되는 클라이언트 측 프로그래밍 언어이자 프론트엔드 웹 개발 언어 중 하나입니다. 그리고 Node.js는 Chrome의
engineering.linecorp.com
pm2 install -g pm2@latest
pm2 start 파일명.js --watch
[Node.js] PM2 설치 및 사용 (Node.js 중단 없이 서비스, 코드 변동 시 자동 재시작)
PM2 Node.js 프로세스를 중단, 끊김 없이 관리할 수 있는 Process Manager. --watch 기능을 이용하여 코드의 변동이 있을 시 이를 감지하여 프로세스를 자동으로 재시작해주기도 하는 등의 기능이 존재. 사
wondev.tistory.com
node install --save mysql
https://www.npmjs.com/package/mysql
mysql
A node.js driver for mysql. It is written in JavaScript, does not require compiling, and is 100% MIT licensed.. Latest version: 2.18.1, last published: 3 years ago. Start using mysql in your project by running `npm i mysql`. There are 7067 other projects i
www.npmjs.com
nodejs-mysql.js--------------------
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '패스워드',
database : 'opentutorials'
});
connection.connect();
connection.query('SELECT * from topic', function (error, results, fields) {
if (error) {
console.log(error);
}
console.log(results);
});
connection.end();
lib-template.js--------------------
module.exports = {
HTML:function(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>
`;
},list:function(topics){
var list = '<ul>';
var i = 0;
while(i < topics.length){
list = list + `<li><a href="/?id=${topics[i]}">${topics[i]}</a></li>`;
i = i + 1;
}
list = list+'</ul>';
return list;
}
}
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 : '패스워드',
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);
====================
lib-template.js--------------------
module.exports = {
HTML:function(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>
`;
},list:function(topics){
var list = '<ul>';
var i = 0;
while(i < topics.length){
list = list + `<li><a href="/?id=${topics[i].id}">${topics[i].title}</a></li>`;
i = i + 1;
}
list = list+'</ul>';
return list;
}
}
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 : '패스워드',
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'){
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);
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);
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 : '패스워드',
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'){
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);
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);
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 : '패스워드',
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'){
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);
main.js--------------------JOIN 글 상세보기 구현
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 : '패스워드^',
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 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}`,
`<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);
pm2 log
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 : '패스워드',
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 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);
})
});
}
} 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);
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 : '패스워드',
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 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);
})
});
}
} else if(pathname === '/create'){
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
console.log(authors);
var tag = '';
var i = 0;
while(i < authors.length){
tag += `<option value="${authors[i].id}">${authors[i].name}</option>`;
i++;
}
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>
<select name="author">
${tag}
</select>
</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);
템플릿으로 빼내면
lib-template.js--------------------
module.exports = {
HTML:function(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>
`;
},list:function(topics){
var list = '<ul>';
var i = 0;
while(i < topics.length){
list = list + `<li><a href="/?id=${topics[i].id}">${topics[i].title}</a></li>`;
i = i + 1;
}
list = list+'</ul>';
return list;
},authorSelect:function(authors){
var tag = '';
var i = 0;
while(i < authors.length){
tag += `<option value="${authors[i].id}">${authors[i].name}</option>`;
i++;
}
return`
<select name="author">
${tag}
</select>
`
}
}
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 : '패스워드',
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 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);
})
});
}
} else if(pathname === '/create'){
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);
});
});
} 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, post.author],
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);
====================
lib-template.js--------------------글 수정 구현
module.exports = {
HTML:function(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>
`;
},list:function(topics){
var list = '<ul>';
var i = 0;
while(i < topics.length){
list = list + `<li><a href="/?id=${topics[i].id}">${topics[i].title}</a></li>`;
i = i + 1;
}
list = list+'</ul>';
return list;
},authorSelect:function(authors, author_id){
var tag = '';
var i = 0;
while(i < authors.length){
var selected = '';
if(authors[i].id === author_id){
selected = ' selected';
}
tag += `<option value="${authors[i].id}"${selected}>${authors[i].name}</option>`;
i++;
}
return`
<select name="author">
${tag}
</select>
`
}
}
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 : '패스워드',
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 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);
})
});
}
} else if(pathname === '/create'){
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);
});
});
} 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, post.author],
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;
}
db.query(`SELECT * FROM author`, function(error, 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);
});
});
});
} 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=? WHERE id=?`, [post.title, post.description, post.author, 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);
====================정리
lib-db.js--------------------
var mysql = require('mysql');
var db = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '비밀번호',
database : 'opentutorials'
});
db.connect();
module.exports = db; // 하나만 꺼내어 놓는다면
git 으로 관리할 때는 db.template.js로 업로드 db.js는 .ignore 에 설정
lib-db.template.js--------------------대신 이것을 업로드
var mysql = require('mysql');
var db = mysql.createConnection({
host : '',
user : '',
password : '',
database : ''
});
db.connect();
module.exports = db; // 하나만 꺼내어 놓는다면
main.js--------------------
var http = require('http');
var url = require('url');
var qs = require('querystring');
var template = require('./lib/template.js');
var db = require('./lib/db');
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 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);
})
});
}
} else if(pathname === '/create'){
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);
});
});
} 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, post.author],
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;
}
db.query(`SELECT * FROM author`, function(error, 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);
});
});
});
} 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=? WHERE id=?`, [post.title, post.description, post.author, 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);
====================
lib-topic.js--------------------
var db = require('./db');
var template = require('./template.js');
exports.home = function(request, response){ // API 여러개 제공
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);
});
}
main.js--------------------
var http = require('http');
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 {
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);
})
});
}
} else if(pathname === '/create'){
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);
});
});
} 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, post.author],
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;
}
db.query(`SELECT * FROM author`, function(error, 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);
});
});
});
} 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=? WHERE id=?`, [post.title, post.description, post.author, 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);
====================
lib-topic.js--------------------
var db = require('./db');
var template = require('./template.js');
var url = require('url');
exports.home = function(request, response){ // API 여러개 제공
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);
})
});
}
main.js--------------------
var http = require('http');
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'){
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);
});
});
} 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, post.author],
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;
}
db.query(`SELECT * FROM author`, function(error, 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);
});
});
});
} 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=? WHERE id=?`, [post.title, post.description, post.author, 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);
====================
lib-topic.js--------------------create
var db = require('./db');
var template = require('./template.js');
var url = require('url');
exports.home = function(request, response){ // API 여러개 제공
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);
});
});
}
main.js--------------------
var http = require('http');
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'){
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();
}
)
});
} 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;
}
db.query(`SELECT * FROM author`, function(error, 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);
});
});
});
} 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=? WHERE id=?`, [post.title, post.description, post.author, 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);
====================
lib-topic.js--------------------제출
var db = require('./db');
var template = require('./template.js');
var url = require('url');
var qs = require('querystring');
exports.home = function(request, response){ // API 여러개 제공
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();
}
)
});
}
main.js--------------------
var http = require('http');
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'){
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(error, 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);
});
});
});
} 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=? WHERE id=?`, [post.title, post.description, post.author, 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);
====================
lib-topic.js--------------------update
var db = require('./db');
var template = require('./template.js');
var url = require('url');
var qs = require('querystring');
exports.home = function(request, response){ // API 여러개 제공
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(error, 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);
});
});
});
}
main.js--------------------
var http = require('http');
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'){
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();
})
});
} 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);
====================
lib-topic.js--------------------update_process
var db = require('./db');
var template = require('./template.js');
var url = require('url');
var qs = require('querystring');
exports.home = function(request, response){ // API 여러개 제공
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(error, 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();
})
});
}
main.js--------------------
var http = require('http');
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'){
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);
====================
lib-topic.js--------------------delete_process
var db = require('./db');
var template = require('./template.js');
var url = require('url');
var qs = require('querystring');
exports.home = function(request, response){ // API 여러개 제공
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(error, 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.delete_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();
});
});
}
main.js--------------------
var http = require('http');
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.delete_process(request, response);
} else {
response.writeHead(404);
response.end('Not found');
}
});
app.listen(3000);
====================
lib-template.js--------------------
module.exports = {
HTML:function(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>
<a href="/author">author</a>
${list}
${control}
${body}
</body>
</html>
`;
},list:function(topics){
var list = '<ul>';
var i = 0;
while(i < topics.length){
list = list + `<li><a href="/?id=${topics[i].id}">${topics[i].title}</a></li>`;
i = i + 1;
}
list = list+'</ul>';
return list;
}
}
main.js--------------------
var http = require('http');
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 author = require('./lib/author');
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.delete_process(request, response);
} else if(pathname === '/author'){
author.home(request, response);
} else {
response.writeHead(404);
response.end('Not found');
}
});
app.listen(3000);
lib-author.js--------------------여기
var db = require('./db');
var template = require('./template.js');
exports.home = function(request, response){ // API 여러개 제공
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);
});
}
lib-author.js--------------------
var db = require('./db');
var template = require('./template.js');
exports.home = function(request, response){ // API 여러개 제공
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,
`
<table>
<tr>
<td>egoing</td>
<td>developer</td>
<td>update</td>
<td>delete</td>
</tr>
<tr>
<td>egoing</td>
<td>developer</td>
<td>update</td>
<td>delete</td>
</tr>
</table>
`,
`<a href="/create">create</a>`
);
response.writeHead(200);
response.end(html);
});
}
lib-author.js--------------------
var db = require('./db');
var template = require('./template.js');
exports.home = function(request, response){ // API 여러개 제공
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,
`
<table>
<tr>
<td>egoing</td>
<td>developer</td>
<td>update</td>
<td>delete</td>
</tr>
<tr>
<td>egoing</td>
<td>developer</td>
<td>update</td>
<td>delete</td>
</tr>
</table>
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
`,
`<a href="/create">create</a>`
);
response.writeHead(200);
response.end(html);
});
}
lib-author.js--------------------
var db = require('./db');
var template = require('./template.js');
exports.home = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
<table>
<tr>
<td>egoing</td>
<td>developer</td>
<td>update</td>
<td>delete</td>
</tr>
</table>
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
`,
`<a href="/create">create</a>`
);
response.writeHead(200);
response.end(html);
});
});
}
lib-author.js--------------------
var db = require('./db');
var template = require('./template.js');
exports.home = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var tag = '';
var i = 0;
while(i < authors.length){
tag += `
<tr>
<td>${authors[i].name}</td>
</tr>
`
i++;
}
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
<table>
${tag}
</table>
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
`,
`<a href="/create">create</a>`
);
response.writeHead(200);
response.end(html);
});
});
}
lib-author.js--------------------
var db = require('./db');
var template = require('./template.js');
exports.home = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var tag = '';
var i = 0;
while(i < authors.length){
tag += `
<tr>
<td>${authors[i].name}</td>
<td>${authors[i].profile}</td>
</tr>
`
i++;
}
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
<table>
${tag}
</table>
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
`,
`<a href="/create">create</a>`
);
response.writeHead(200);
response.end(html);
});
});
}
lib-author.js--------------------
var db = require('./db');
var template = require('./template.js');
exports.home = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var tag = '';
var i = 0;
while(i < authors.length){
tag += `
<tr>
<td>${authors[i].name}</td>
<td>${authors[i].profile}</td>
<td>update</td>
<td>delete</td>
</tr>
`
i++;
}
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
<table>
${tag}
</table>
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
`,
`<a href="/create">create</a>`
);
response.writeHead(200);
response.end(html);
});
});
}
lib-author.js--------------------
var db = require('./db');
var template = require('./template.js');
exports.home = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var tag = '<table>';
var i = 0;
while(i < authors.length){
tag += `
<tr>
<td>${authors[i].name}</td>
<td>${authors[i].profile}</td>
<td>update</td>
<td>delete</td>
</tr>
`
i++;
}
tag += '</table>';
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
${tag}
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
`,
`<a href="/create">create</a>`
);
response.writeHead(200);
response.end(html);
});
});
}
====================
lib-template.js--------------------여기
module.exports = {
HTML:function(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>
<a href="/author">author</a>
${list}
${control}
${body}
</body>
</html>
`;
},list:function(topics){
var list = '<ul>';
var i = 0;
while(i < topics.length){
list = list + `<li><a href="/?id=${topics[i].id}">${topics[i].title}</a></li>`;
i = i + 1;
}
list = list+'</ul>';
return list;
}, authorTable:function(authors){
var tag = '<table>';
var i = 0;
while(i < authors.length){
tag += `
<tr>
<td>${authors[i].name}</td>
<td>${authors[i].profile}</td>
<td>update</td>
<td>delete</td>
</tr>
`
i++;
}
tag += '</table>';
return tag;
}
}
lib-author.js--------------------
var db = require('./db');
var template = require('./template.js');
exports.home = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
${template.authorTable(authors)}
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
`,
``
);
response.writeHead(200);
response.end(html);
});
});
}
====================
lib-author.js--------------------
var db = require('./db');
var template = require('./template.js');
exports.home = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
${template.authorTable(authors)}
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
`,
`
<form action="create_author_process" method="post">
<p>
<input type="text" name="name" placeholder="name">
</p>
<p>
<textarea name="profile"></textarea>
</p>
</form>
`
);
response.writeHead(200);
response.end(html);
});
});
}
lib-author.js--------------------
var db = require('./db');
var template = require('./template.js');
exports.home = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
${template.authorTable(authors)}
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
<form action="create_author_process" method="post">
<p>
<input type="text" name="name" placeholder="name">
</p>
<p>
<textarea name="profile" placeholder="description"></textarea>
</p>
</form>
`,
`
`
);
response.writeHead(200);
response.end(html);
});
});
}
====================
main.js--------------------저자 추가
var http = require('http');
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 author = require('./lib/author');
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.delete_process(request, response);
} else if(pathname === '/author'){
author.home(request, response);
} else if(pathname === '/author/create_process'){
author.create_process(request, response);
} else {
response.writeHead(404);
response.end('Not found');
}
});
app.listen(3000);
lib-author.js--------------------
var db = require('./db');
var template = require('./template.js');
var qs = require('querystring');
exports.home = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
${template.authorTable(authors)}
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
<form action="/author/create_process" method="post">
<p>
<input type="text" name="name" placeholder="name">
</p>
<p>
<textarea name="profile" placeholder="description"></textarea>
</p>
<p>
<input type="submit">
</p>
</form>
`,
`
`
);
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 author (name, profile)
VALUES(?, ?)`,
[post.name, post.profile],
function(error, result) {
if(error){
throw error;
}
response.writeHead(302, {Location: `/author`});
response.end();
}
)
});
}
====================
lib-template.js--------------------update
module.exports = {
HTML:function(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>
<a href="/author">author</a>
${list}
${control}
${body}
</body>
</html>
`;
},list:function(topics){
var list = '<ul>';
var i = 0;
while(i < topics.length){
list = list + `<li><a href="/?id=${topics[i].id}">${topics[i].title}</a></li>`;
i = i + 1;
}
list = list+'</ul>';
return list;
}, authorTable:function(authors){
var tag = '<table>';
var i = 0;
while(i < authors.length){
tag += `
<tr>
<td>${authors[i].name}</td>
<td>${authors[i].profile}</td>
<td><a href="/author/update?id=${authors[i].id}">update</td>
<td>delete</td>
</tr>
`
i++;
}
tag += '</table>';
return tag;
}
}
main.js--------------------
var http = require('http');
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 author = require('./lib/author');
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.delete_process(request, response);
} else if(pathname === '/author'){
author.home(request, response);
} else if(pathname === '/author/create_process'){
author.create_process(request, response);
} else if(pathname === '/author/update'){
author.update(request, response);
} else {
response.writeHead(404);
response.end('Not found');
}
});
app.listen(3000);
====================
lib-author.js--------------------저자 수정
var db = require('./db');
var template = require('./template.js');
var qs = require('querystring');
var url = require('url');
exports.home = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
${template.authorTable(authors)}
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
<form action="/author/create_process" method="post">
<p>
<input type="text" name="name" placeholder="name">
</p>
<p>
<textarea name="profile" placeholder="description"></textarea>
</p>
<p>
<input type="submit" value="create">
</p>
</form>
`,
``
);
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 author (name, profile)
VALUES(?, ?)`,
[post.name, post.profile],
function(error, result) {
if(error){
throw error;
}
response.writeHead(302, {Location: `/author`});
response.end();
}
)
});
}
exports.update = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var _url = request.url;
var queryData = url.parse(_url, true).query;
db.query(`SELECT * FROM author WHERE id=?`, [queryData.id], function(error3, author){
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
${template.authorTable(authors)}
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
<form action="/author/update_process" method="post">
<p>
<input type="hidden" name="id" value="${queryData.id}">
</p>
<p>
<input type="text" name="name" value="${author[0].name}" placeholder="name">
</p>
<p>
<textarea name="profile" placeholder="description">${author[0].profile}</textarea>
</p>
<p>
<input type="submit" value="update">
</p>
</form>
`,
``
);
response.writeHead(200);
response.end(html);
});
});
});
}
main.js--------------------
var http = require('http');
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 author = require('./lib/author');
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.delete_process(request, response);
} else if(pathname === '/author'){
author.home(request, response);
} else if(pathname === '/author/create_process'){
author.create_process(request, response);
} else if(pathname === '/author/update'){
author.update(request, response);
} else {
response.writeHead(404);
response.end('Not found');
}
});
app.listen(3000);
====================
main.js--------------------
var http = require('http');
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 author = require('./lib/author');
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.delete_process(request, response);
} else if(pathname === '/author'){
author.home(request, response);
} else if(pathname === '/author/create_process'){
author.create_process(request, response);
} else if(pathname === '/author/update'){
author.update(request, response);
} else if(pathname === '/author/update_process'){
author.update_process(request, response);
} else {
response.writeHead(404);
response.end('Not found');
}
});
app.listen(3000);
lib-author.js--------------------
var db = require('./db');
var template = require('./template.js');
var qs = require('querystring');
var url = require('url');
exports.home = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
${template.authorTable(authors)}
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
<form action="/author/create_process" method="post">
<p>
<input type="text" name="name" placeholder="name">
</p>
<p>
<textarea name="profile" placeholder="description"></textarea>
</p>
<p>
<input type="submit" value="create">
</p>
</form>
`,
``
);
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 author (name, profile)
VALUES(?, ?)`,
[post.name, post.profile],
function(error, result) {
if(error){
throw error;
}
response.writeHead(302, {Location: `/author`});
response.end();
}
)
});
}
exports.update = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var _url = request.url;
var queryData = url.parse(_url, true).query;
db.query(`SELECT * FROM author WHERE id=?`, [queryData.id], function(error3, author){
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
${template.authorTable(authors)}
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
<form action="/author/update_process" method="post">
<p>
<input type="hidden" name="id" value="${queryData.id}">
</p>
<p>
<input type="text" name="name" value="${author[0].name}" placeholder="name">
</p>
<p>
<textarea name="profile" placeholder="description">${author[0].profile}</textarea>
</p>
<p>
<input type="submit" value="update">
</p>
</form>
`,
``
);
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 author SET name=?, profile=? WHERE id=?`,
[post.name, post.profile, post.id],
function(error, result) {
if(error){
throw error;
}
response.writeHead(302, {Location: `/author`});
response.end();
}
)
});
}
====================
lib-template.js--------------------
module.exports = {
HTML:function(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>
<a href="/author">author</a>
${list}
${control}
${body}
</body>
</html>
`;
},list:function(topics){
var list = '<ul>';
var i = 0;
while(i < topics.length){
list = list + `<li><a href="/?id=${topics[i].id}">${topics[i].title}</a></li>`;
i = i + 1;
}
list = list+'</ul>';
return list;
}, authorTable:function(authors){
var tag = '<table>';
var i = 0;
while(i < authors.length){
tag += `
<tr>
<td>${authors[i].name}</td>
<td>${authors[i].profile}</td>
<td><a href="/author/update?id=${authors[i].id}">update</td>
<td>
<form action="/author/delete_process" method="post">
<input type="hidden" name="id" value="${authors[i].id}">
<input type="submit" value="delete">
</form>
</td>
</tr>
`
i++;
}
tag += '</table>';
return tag;
}
}
main.js--------------------
var http = require('http');
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 author = require('./lib/author');
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.delete_process(request, response);
} else if(pathname === '/author'){
author.home(request, response);
} else if(pathname === '/author/create_process'){
author.create_process(request, response);
} else if(pathname === '/author/update'){
author.update(request, response);
} else if(pathname === '/author/update_process'){
author.update_process(request, response);
} else if(pathname === '/author/delete_process'){
author.delete_process(request, response);
} else {
response.writeHead(404);
response.end('Not found');
}
});
app.listen(3000);
lib-author.js--------------------
var db = require('./db');
var template = require('./template.js');
var qs = require('querystring');
var url = require('url');
exports.home = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
${template.authorTable(authors)}
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
<form action="/author/create_process" method="post">
<p>
<input type="text" name="name" placeholder="name">
</p>
<p>
<textarea name="profile" placeholder="description"></textarea>
</p>
<p>
<input type="submit" value="create">
</p>
</form>
`,
``
);
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 author (name, profile)
VALUES(?, ?)`,
[post.name, post.profile],
function(error, result) {
if(error){
throw error;
}
response.writeHead(302, {Location: `/author`});
response.end();
}
)
});
}
exports.update = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var _url = request.url;
var queryData = url.parse(_url, true).query;
db.query(`SELECT * FROM author WHERE id=?`, [queryData.id], function(error3, author){
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
${template.authorTable(authors)}
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
<form action="/author/update_process" method="post">
<p>
<input type="hidden" name="id" value="${queryData.id}">
</p>
<p>
<input type="text" name="name" value="${author[0].name}" placeholder="name">
</p>
<p>
<textarea name="profile" placeholder="description">${author[0].profile}</textarea>
</p>
<p>
<input type="submit" value="update">
</p>
</form>
`,
``
);
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 author SET name=?, profile=? WHERE id=?`,
[post.name, post.profile, post.id],
function(error, result) {
if(error){
throw error;
}
response.writeHead(302, {Location: `/author`});
response.end();
}
)
});
}
exports.delete_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 author WHERE id=?`,
[post.id],
function(error, result) {
if(error){
throw error;
}
response.writeHead(302, {Location: `/author`});
response.end();
}
)
});
}
lib-author.js--------------------
var db = require('./db');
var template = require('./template.js');
var qs = require('querystring');
var url = require('url');
exports.home = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
${template.authorTable(authors)}
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
<form action="/author/create_process" method="post">
<p>
<input type="text" name="name" placeholder="name">
</p>
<p>
<textarea name="profile" placeholder="description"></textarea>
</p>
<p>
<input type="submit" value="create">
</p>
</form>
`,
``
);
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 author (name, profile)
VALUES(?, ?)`,
[post.name, post.profile],
function(error, result) {
if(error){
throw error;
}
response.writeHead(302, {Location: `/author`});
response.end();
}
)
});
}
exports.update = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var _url = request.url;
var queryData = url.parse(_url, true).query;
db.query(`SELECT * FROM author WHERE id=?`, [queryData.id], function(error3, author){
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
${template.authorTable(authors)}
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
<form action="/author/update_process" method="post">
<p>
<input type="hidden" name="id" value="${queryData.id}">
</p>
<p>
<input type="text" name="name" value="${author[0].name}" placeholder="name">
</p>
<p>
<textarea name="profile" placeholder="description">${author[0].profile}</textarea>
</p>
<p>
<input type="submit" value="update">
</p>
</form>
`,
``
);
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 author SET name=?, profile=? WHERE id=?`,
[post.name, post.profile, post.id],
function(error, result) {
if(error){
throw error;
}
response.writeHead(302, {Location: `/author`});
response.end();
}
)
});
}
exports.delete_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 author_id=?`,
[post.id],
function(error1, result1){
if(error1){
throw error1;
}
db.query(`
DELETE FROM author WHERE id=?`,
[post.id],
function(error2, result2) {
if(error2){
throw error2;
}
response.writeHead(302, {Location: `/author`});
response.end();
}
)
}
)
});
}
====================
보안
npm install --save sanitize-html
topic.js--------------------
var db = require('./db');
var template = require('./template.js');
var url = require('url');
var qs = require('querystring');
var sanitizeHtml = require('sanitize-html');
exports.home = function(request, response){ // API 여러개 제공
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>${sanitizeHtml(title)}</h2>
${sanitizeHtml(description)}
<p>by ${sanitizeHtml(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(error, 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.delete_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();
});
});
}
============================
lib-topic.js------------
var db = require('./db');
var template = require('./template.js');
var url = require('url');
var qs = require('querystring');
var sanitizeHtml = require('sanitize-html');
exports.home = function(request, response){ // API 여러개 제공
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>${sanitizeHtml(title)}</h2>
${sanitizeHtml(description)}
<p>by ${sanitizeHtml(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(sanitizeHtml(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(error, authors){
var list = template.list(topics);
var html = template.HTML(sanitizeHtml(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="${sanitizeHtml(topic[0].title)}"></p>
<p>
<textarea name="description" placeholder="description">${sanitizeHtml(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.delete_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();
});
});
}
lib-template.js--------------------
var sanitizeHtml = require('sanitize-html');
module.exports = {
HTML:function(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>
<a href="/author">author</a>
${list}
${control}
${body}
</body>
</html>
`;
},list:function(topics){
var list = '<ul>';
var i = 0;
while(i < topics.length){
list = list + `<li><a href="/?id=${topics[i].id}">${sanitizeHtml(topics[i].title)}</a></li>`;
i = i + 1;
}
list = list+'</ul>';
return list;
}, authorSelect:function(authors){
var tag = '';
var i = 0;
while(i<authors.length){
tag +=`<option value="${authors[i].id}">${sanitizeHtml(authors[i].name)}</option>`;
i++;
}
return `
<select name="author">
${tag}
</select>
`
}, authorTable:function(authors){
var tag = '<table>';
var i = 0;
while(i < authors.length){
tag += `
<tr>
<td>${sanitizeHtml(authors[i].name)}</td>
<td>${sanitizeHtml(authors[i].profile)}</td>
<td><a href="/author/update?id=${authors[i].id}">update</td>
<td>
<form action="/author/delete_process" method="post">
<input type="hidden" name="id" value="${authors[i].id}">
<input type="submit" value="delete">
</form>
</td>
</tr>
`
i++;
}
tag += '</table>';
return tag;
}
}
lib-author.js--------------------
var db = require('./db');
var template = require('./template.js');
var qs = require('querystring');
var url = require('url');
var sanitizeHtml = require('sanitize-html');
exports.home = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
${template.authorTable(authors)}
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
<form action="/author/create_process" method="post">
<p>
<input type="text" name="name" placeholder="name">
</p>
<p>
<textarea name="profile" placeholder="description"></textarea>
</p>
<p>
<input type="submit" value="create">
</p>
</form>
`,
``
);
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 author (name, profile)
VALUES(?, ?)`,
[post.name, post.profile],
function(error, result) {
if(error){
throw error;
}
response.writeHead(302, {Location: `/author`});
response.end();
}
)
});
}
exports.update = function(request, response){ // API 여러개 제공
db.query(`SELECT * FROM topic`, function(error, topics){
db.query(`SELECT * FROM author`, function(error2, authors){
var _url = request.url;
var queryData = url.parse(_url, true).query;
db.query(`SELECT * FROM author WHERE id=?`, [queryData.id], function(error3, author){
var title = 'author';
var list = template.list(topics);
var html = template.HTML(title, list,
`
${template.authorTable(authors)}
<style>
table{
border-collapse: collapse;
}
td{
border: 1px solid black;
}
</style>
<form action="/author/update_process" method="post">
<p>
<input type="hidden" name="id" value="${queryData.id}">
</p>
<p>
<input type="text" name="name" value="${sanitizeHtml(author[0].name)}" placeholder="name">
</p>
<p>
<textarea name="profile" placeholder="description">${sanitizeHtml(author[0].profile)}</textarea>
</p>
<p>
<input type="submit" value="update">
</p>
</form>
`,
``
);
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 author SET name=?, profile=? WHERE id=?`,
[post.name, post.profile, post.id],
function(error, result) {
if(error){
throw error;
}
response.writeHead(302, {Location: `/author`});
response.end();
}
)
});
}
exports.delete_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 author_id=?`,
[post.id],
function(error1, result1){
if(error1){
throw error1;
}
db.query(`
DELETE FROM author WHERE id=?`,
[post.id],
function(error2, result2) {
if(error2){
throw error2;
}
response.writeHead(302, {Location: `/author`});
response.end();
}
)
}
)
});
}
====================
페이지 기능
SELECT * FROM topic LIMIT 0 OFFSET 20;