[생활 코딩] node.js
파일 불러오기 수정 사항
'’를 사용하는 것이 아닌 esc밑에 있는 버튼을 사용하는 것이다. 물결 말고 ‘처럼 생긴 문자를 사용하면 ${}를 인식할 수 있으며 동시에 문자열처럼 사용할 수도 있다. 파일을 불러올 때, ‘‘를 사용하였기 때문에 계속 undefined
가 떴던 것이다.
조건문 활용하여 404화면 띄우기
1 2 3 4 5 6 7 8 | var args = process.argv; //args -> 배열 형식으로 출력된다. 0번째 값은 node.js의 경로를 갖고 있고, 1번째 값은 현재 열고자 하는 파일의 경로를 갖고 있다. 따라서 2번째부터 입력한 값을 가진 배열이라고 할 수 있으므로 args[2] === '1'이라는 조건문을 사용한 것이다. if(args[2] === '1'){ console.log('C1'); } else { console.log('C2'); } console.log('D'); | cs |
args
배열 형식으로 출력된다. 0번째 값 은 node.js의 경로를 갖고 있고, 1번째 값 은 현재 열고자 하는 파일의 경로를 갖고 있다. 따라서 2번째부터 입력한 값을 가진 배열이라고 할 수 있으므로 args[2] === ‘1’이라는 조건문을 사용한 것이다. 이 코드를 활용하여 다음과 같이 수정할 수 있었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | var http = require('http'); var fs = require('fs'); var url = require('url'); 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; var title = queryData.id; if(pathname === '/'){ fs.readFile(`data/${queryData.id}`, 'utf8', function(err, description){ var template = ` <!doctype html> <html> <head> <title>WEB1 - ${title}</title> <meta charset="utf-8"> </head> <body> <h1><a href="/">WEB</a></h1> <ul> <li><a href="/?id=HTML">HTML</a></li> <li><a href="/?id=CSS">CSS</a></li> <li><a href="/?id=JavaScript">JavaScript</a></li> </ul> <h2>${title}</h2> <p>${description}</p> </body> </html> `; response.writeHead(200); response.end(template); }); } else { response.writeHead(404); response.end('Not found'); } }); app.listen(3000); | cs |
pathname
은 다음 값이 id이면 if문으로 들어가고 다른 쿼리 스트링이 온다면 404 Not Found를 출력해준다.
data폴더의 제목을 리스트로 만들기
1 2 3 4 5 6 | const testFolder = './data'; //data폴더에 있는 파일들의 제목을 리스트로 만든다. const fs = require('fs'); fs.readdir(testFolder, function(error, filelist){ console.log(filelist); }) | cs |
data폴더
안에 있는 파일들의 제목을 리스트 형식 으로 만든다. 리스트로 만들어야 되는 이유는 사용자가 data에 문서를 추가하면 ul태그에 리스트를 추가할 필요없이 자동으로 추가될 수 있도록 하기 위해서 이다. 이를 위한 코드는 다음과 같다.
1 2 3 4 5 6 7 | var list = '<ul>'; var i = 0; while(i < filelist.length){ list = list + `<li><a href="/?id=${filelist[i]}">${filelist[i]}</a></li>`; i = i + 1; } list = list+'</ul>'; | cs |
리스트의 길이만큼 반복문을 돌면서 li 태그를 적용시켜주는 것이다. 그렇기 때문에 data폴더에 파일만 추가가 된다면 그만큼 반복문을 돌아서 따로 코드를 수정해주지 않아도 웹 페이지에 적용된 모습을 확인할 수 있다.
함수로 정리
반복이 있다면 그 부분을 함수로 만들 수 있다. 여기서 평소의 다른 프로그래밍 언어와의 차이점은 리턴값의 데이터형, 매개변수의 데이터형을 따로 쓰지 않아도 된다는 사실 이다. html 부분이 2번 반복이 있었으므로 다음과 같은 함수를 만들어 주었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function templateHTML(title, list, body) { return ` <!doctype html> <html> <head> <title>WEB1 - ${title}</title> <meta charset="utf-8"> </head> <body> <h1><a href="/">WEB</a></h1> ${list} ${body} </body> </html> ` } | cs |
node.js를 사용해주니 확실히 간결해진 html코드를 볼 수 있다. 완성된 코드는 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | var http = require('http'); var fs = require('fs'); var url = require('url'); function templateHTML(title, list, body) { return ` <!doctype html> <html> <head> <title>WEB1 - ${title}</title> <meta charset="utf-8"> </head> <body> <h1><a href="/">WEB</a></h1> ${list} ${body} </body> </html> ` } function templateLIST(filelist) { var list = '<ul>'; var i = 0; while (i < filelist.length) { list = list + `<li><a href="/?id=${filelist[i]}">${filelist[i]}</a></li>`; i++; } list += '</ul>'; return list; } 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) { fs.readdir('./data', function(error, filelist) { var title = 'Welcome'; var description = 'Hello, Node.js'; /* var list = `<ol> <li><a href="/?id=HTML">HTML</a></li> <li><a href="/?id=CSS">CSS</a></li> <li><a href="/?id=JavaScript">JavaScript</a></li> </ol>`; */ var list = templateLIST(filelist); var template = templateHTML(title, list, `<h2>${title}</h2><p>${description}</p>`); response.writeHead(200); response.end(template); }) } else { fs.readdir('./data', function(error, filelist) { var title = queryData.id; var list = templateLIST(filelist); fs.readFile( `./data/${title}`, 'utf8', function(err, description) { var title = queryData.id; var template = templateHTML(title, list, `<h2>${title}</h2><p>${description}</p>`); response.writeHead(200); response.end(template); }); }); } } else { response.writeHead(404); response.end('Not Found'); } }); app.listen(3000); | cs |
(이 코드는 꼭 node.js를 통해서 연결이 되어야만 실행이 되는 부분이므로 따로 HTML 코드 형식으로 포스팅하지 않았다.)
느낀 점
간단히 배워도 굉장이 중요하다는 것이 보이는 node.js,,,, 개인 프로젝트를 통해서 더 익혀볼 예정이다. 이번주에는 생활 코딩 강의를 듣는 대신 내가 직접 node.js를 활용한 웹 페이지를 구현해 볼 예정이다. 생활 코딩 강의를 듣는 것이 아니기 때문에 일주일 내에 최대한 원하는 내용의 구현정도는 꼭 해야된다!
댓글남기기