반응형
[생활코딩] Node.js 코드의 정리정돈 (topic)
home 분리하기
main.js
var topic = require('./lib/topic'); // topic모듈 불러오기
if(pathname === '/'){
if(queryData.id === undefined){
topic.home(request,response);
// topic모듈의 home 사용하기
// 인자로 request,response 전달
} else {
...
}
}
lib/topic.js
var db = require('./db');
var template = require('./template.js');
exports.home = function(request,response){
// 한 모듈에서 여러개 내보낼 때는 exports.이름 사용
// 매개변수 request,response에 인자값 받기
db.query('SELECT*FROM topic', function(error, topics){
var title = 'Welcome';
var description = 'Hello, Node.js';
var list = template.list(topics);
var html = template.HTML(title, list,
`<h2>${title}</h2>${description}`,
`<a href="/create">create</a>`
);
response.writeHead(200);
response.end(html);
// 매개변수로 받은 response 사용하기
});
}
상세페이지 분리하기
main.js
var topic = require('./lib/topic');
if(pathname === '/'){
if(queryData.id === undefined){
topic.home(request,response);
} else {
topic.page(request,response);
// topic모듈의 page메소드 사용하기
// 인자로 request,response 보내기
}
}
lib/topic.js
var db = require('./db');
var template = require('./template.js');
var url = require('url')
exports.page = function(request,response){
// page메소드 생성하고 매개변수 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;}
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);
});
});
}
create, create_process 분리하기
main.js
else if(pathname === '/create'){
topic.create(request,response);
} else if(pathname === '/create_process'){
topic.create_process(request,response);
}
lib/topic.js
var db = require('./db');
var template = require('./template.js');
var qs = require('querystring');
exports.create = function(request,response){
db.query('SELECT*FROM topic', function(error, topics){
db.query('SELECT*FROM author', function(error2, authors){
var title = 'WEB - 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>
`, '');
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);
var title = post.title;
var description = post.description;
db.query('INSERT INTO topic (title, description, created, author_id) VALUES (?, ?, NOW(), ?)',[title, description, post.author], function(error, result){
if(error){ throw error; }
response.writeHead(302, {Location: `/?id=${result.insertId}`});
response.end();
});
});
}
update, update_process 분리하기
main.js
else if(pathname === '/update'){
topic.update(request,response);
} else if(pathname === '/update_process'){
topic.update_process(request,response);
}
lib/topic.js
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(error3, 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();
});
});
}
delete 분리하기
main.js
else if(pathname === '/delete_process'){
topic.delete_process(request,response);
}
lib/topic.js
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();
})
});
}
반응형
'Dev > Nodejs-mysql' 카테고리의 다른 글
[Nodejs-mysql] 폼 만들고 모듈 분리하기 (0) | 2020.08.07 |
---|---|
[Nodejs-mysql] 테이블 만들고 모듈 분리하기 (0) | 2020.08.07 |
[Nodejs-mysql] Select값 수정하기 (0) | 2020.08.07 |
[Nodejs-mysql] 데이터 Select의 option으로 출력하고 선택값 저장 (0) | 2020.08.06 |
[Nodejs-mysql] Join된 테이블에서 값 가져오기 (0) | 2020.08.06 |