728x90
1. DB 연결
- 새로운 js파일 만들어서 db연결 코드 옮겨주기
var mysql = require('mysql'); var db = mysql.createConnection({ host:'localhost', user:'jinsugyeong', 'password':'0000', database:'opentutorials' }); db.connect(); module.exports = db;
- 필요없는 코드 삭제하고, db 변수에 새로만든 파일의 경로 적어주기
var http = require('http'); var url = require('url'); var qs = require('querystring'); var template = require('./lib/template.js'); var db = require('./lib/db'); ...생략...
2. 글 목록 조회
- 원 코드에서 모듈로 사용한 db와 template를 새로 만드는 파일에서도 사용할 수 있게 모듈추가해주기
- 원 코드 쿼리문에 사용한 함수 매개변수 갯수에 맞게 export 매개변수 넣어주기
var db = require('./db'); var template = require('./template.js'); 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); }); }
- export(s).함수명 으로 main 파일에서 호출 잘 해주기
if(pathname === '/') { //루트일 때 실행(오류X) if(queryData.id === undefined) { //쿼리 스트링 없을 때 실행 (홈 O) topic.home(request, response); } ...(생략)...
3. 글 상세 조회
- 원 코드에서 쓰였던 url모듈과 추가해주기
- 함수 안에 request로 받은 주소와 쿼리스트링 데이터로 변수 2개 만들기
...(생략)... var url = require('url'); var qs = require('querystring'); //모듈추가 /** * 글 상세 조회 * @param {*} request * @param {*} response */ 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 AS t LEFT JOIN author AS a ON t.author_id = a.id WHERE t.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); }); }); }
- 아까처럼 원래 코드있던 곳에 추가한 page 함수 추가해주기
- url 모듈은 그대로 둬야함!
...(생략)... if(pathname === '/') { //루트일 때 실행(오류X) if(queryData.id === undefined) { //쿼리 스트링 없을 때 실행 (홈 O) topic.home(request, response); }else { //쿼리 스트링 있을 때 실행 (홈 X) topic.page(request, response); } ...(생략)...
4. 글 생성
- 글 생성 화면과 생성 처리 2가지 경우를 따로 분리해줘야 한다.
//main.js 파일 ...(생략) } else if(pathname === '/create') { //create일 때 실행 topic.create(request, response); } else if(pathname === '/create_process') { //create_process일 때 실행 topic.create_process(request, response); ...(생략)...
/** * 글 생성 처리 * @param {*} request * @param {*} response */ exports.create_process = function(request, response) { var body = ''; request.on('data', function(data) { //조각조각 나눠서 데이터를 수신할 때마다 호출되는 콜백 함수 //데이터를 처리하는 기능을 정의 body = body + data; }); request.on('end', function(data) { //더이상 수신할 정보가 없으면 호출되는 콜백 함수 //데이터 처리를 마무리하는 기능을 정의 var post = qs.parse(body); console.log(post); 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(); } ); }); } /** * 글 생성 화면 * @param {*} request * @param {*} response */ 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> ${template.authorSelect(authors)} <p><input type="submit"></p> </form> `, `<a href="/create">create</a>` ); response.writeHead(200); response.end(html); }); }); } ..(생략)...
이렇게.,.. 모든 else if들을 반복해줍니다....
그러면

이렇게 싹 정리 너무 깔금하죠
'{ "Hello World!" }; > Node.js' 카테고리의 다른 글
(Node.js) 테이블 조인하여 글 작성시 작성자 선택하거나 수정하기 (1) | 2024.02.21 |
---|---|
( Node.js) mysql 모듈 이용하여 글 목록 조회, 상세조회, 생성, 수정, 삭제 기능(CRUD) 구현 (0) | 2023.12.15 |
(Node.js) 입출력 정보 보안 (0) | 2023.12.12 |
(Node.js) 템플릿 기능 정리(객체지향), 모듈활용 (0) | 2023.12.12 |
(Node.js) 글 수정, 삭제 하기 (0) | 2023.12.11 |