// home
exports.home = function (request, response) {
db.query(`SELECT *FROM topic`, function (error, topics) {
var title = "Welcome";
var description = "Hello Node.js";
var list = template.list(topics);
var html = template.html(
title,
list,
`<h2>${title}</h2>${description}`,
`<a href="/create">create</a>`
);
response.writeHead(200);
response.end(html);
});
};
//page
exports.page = function (request, response) {
var _url = request.url;
var queryData = url.parse(_url, true).query;
db.query(`SELECT *FROM topic`, function (error, topics) {
//db쿼리를 SELECT* FROM topic으로 하여 모든 내용을 가져오게 한다. (목록을 뿌려주기 위해 데이터를 가져오는 부분)
if (error) {
throw error;
}
db.query(
`SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.id WHERE topic.id =?`,
// join을 사용하여 저자 id와 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 부분
exports.create = function (request, response) {
db.query(`SELECT *FROM topic`, function (error, topics) {
db.query(`SELECT * FROM author`, function (error2, authors) {
// 저자의 목록을 가져오고 authors에 담아 마지막 템플릿의 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.authorSelct(authors)}
</p>
<p><input type="submit"></p></from>`,
`<a href="/create">create</a>`
);
response.writeHead(200);
response.end(html);
});
});
};
//create_process 부분
exports.create_process = function (request, response) {
var body = "";
request.on("data", function (data) {
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],// 쿼리의 title, description과 author을 ?에 순서에 맡게 넣는다.
function (error, result) {
if (error) {
throw error;
}
response.writeHead(302, { Location: `/?id=${result.insertId}` }); //callback에 result로 insertId로 방금 추가한 데이터의 id로 접근하여 페이지로 이동
response.end();
}
);
});
};
//update
exports.update = function (request, response) {
var _url = request.url;
var queryData = url.parse(_url, true).query;
db.query(`SELECT * FROM topic`, function (error, topics) {
if (error) {
throw error;
}
db.query(
`SELECT * FROM topic WHERE id =?`,
[queryData.id],
function (error2, topic) {
if (error2) {
throw error2;
}
db.query(`SELECT * FROM author`, function (error2, authors) {
var list = template.list(topics);
var html = template.html(
topic[0].title,
list,
`<form action="/update_process" method="post">
<input type="hidden" name="id" value="${topic[0].id}"
<p><input type="text" name ="title" placeholder="title" value="${
topic[0].title
}"></p>
<p><textarea name="description" placeholder="description">${
topic[0].description
}</textarea></p>
<p>
${template.authorSelct(authors, topic[0].author_id)}
</p>
<p><input type="submit"></p>`,
`<a href="/create">create</a> <a href="/update?id=${topic[0].id}">update</a>`
);
response.writeHead(200);
response.end(html);
});
}
);
});
};
//update_process
exports.update_process = function (request, response) {
var body = "";
request.on("data", function (data) {
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}` }); //302은 변경된 페이지고 redirect
response.end();
}
);
});
};
// delete_process
exports.delete_process = function (request, response) {
var body = "";
request.on("data", function (data) {
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: `/` }); //302은 변경된 페이지고 redirect
response.end();
}
);
});
};