[Developer] [node.js] 3.
출처; 생활코딩의 Node.js의 강의 내용 / 이고잉 강사님 감사드립니다 (꾸벅)
이고잉님의 강의를 듣다 보면, 코딩을 포기하지 않게 해 준다. "심지어 코딩 녀석, 사실 재미있는 아이라며?"라는 궁금증과 공부하는데 있어서 동기부여가 확실히 된다. 특히, 특정 언어를 배우는 데 있어서 어떤 부분이 중요한지 맥을 잘 짚어주시기 때문에 길을 잃지 않게 해 준다. 그는 Node.js를 가르쳐주시면서 CRUD(Create, Read, Update, Delete)라는 개념을 중심적으로 다루고 있다. 이는 node.js뿐만이 아니라 정보시스템 분야에서 중요하게 다루는 개념이기도 하다. 어떤 프로그래밍 언어를 통해서 처음으로 시도해야할 것은, 그 프로그래밍 언어를 통해서 파일을 어떻게 생성하고, 읽을 수 있는가이다. node.js에서 파일을 읽고 쓰는 방법은 다음과 같다.
먼저, 내가 node 명령어를 통해서 출력하고 싶은 텍스트가 담긴 파일을 nodejs라는 폴더에 넣는다. 파일을 읽는 코드가 담긴 fileread.js도 같은 nodejs폴더에 넣는다.
fileread에 담기는 코드의 내용은 다음과 같다. 코드를 살펴보면, readFile이라는 코드에 sample.txt를 넣어서 읽을 수 있다.
var fs = require('fs')
fs.readFile('sample.txt', 'utf8', function(err,data){
console.log(data);
})
이러한 기능이 동적으로 웹 개발하는데 있어서 쓰이게 된다. 즉, 아래의 내가 지금 만들고 있는 웹페이지의 경우 'undefined'된 글씨의 부분이 위의 각각 보라색으로 줄그어진 부분(또 다른 링크)에 따라서 undefined된 부분이 바뀌게 된다. 나는 이 부분을 예를 들어서 Hot spots of k-pop star와 관련된 컨텐츠가 Hot spots of k-pop star를 클릭하면 사용자에게 보여지게 된다.
이에 대한 구체적인 코드 부분은 다음과 같다.
//data폴더에 있는 하위 파일들, querysting과 동일한 명을 가지고 있는 파일들이
//내가 만든 웹페이지에 보여지게 된다.
fs.readFile(`data/${queryData.id}`, 'utf8', function(err, description){
var template = `
<!doctype html>
<html>
<head>
<title> Knowledge-graph-application-by-Carayoon</title>
<meta charset="utf-8">
//(...코드 생략...)
<p> ${description} </p> //위에서 function에서 description으로 지정함
</body>
</html>
`
response.end(template); //웹페이지에 template 변수가 포함하고 있는 내용을 보여준다.
}
만약, 존재하지 않는 querysting에 대한 값의 경우, (사용자에게 보여줄 웹페이지 파일이 없는 경우)에는 예외처리를 어떻게 하면 될까?
다른 프로그래밍의 언어처럼 if ~ else 구문을 활용하여 이를 관리하면 되는데, 먼저 querysting이 사전에 존재하는 값인 경우에는 console.log(url.parse(_url, true)); 의 값이 다음처럼 나온다. pathname이 '/'으로 지정되어 있다. 하지만, querysting이 없는 경우에는 '/'값으로 시작하지 않는다. 자, 그렇다면 if ~ else 구문을 사용하여 예외적인 페이지에 대한 처리를 해보자.
먼저, if에서 pathname이 '/'일 경우에는 웹 서버가 웹브라우저에게 writehead(200)을 전송하고, 이 외의 에러일 경우에는 writehead(404)를 전송하도록 하는 코드를 작성하면 된다.
var _url = request.url;
var pathname = url.parse(_url, true).pathname;
if (pathname ==='/') {
// pathname이 '/'일 경우 동작하는 코드
//
response.writeHead(200); //웹서버가 웹브라우저에게 응답할 때, Error가 아닐 경우
} else {
//
response.writeHead(404); ////웹서버가 웹브라우저에게 응답할 때, Error일 경우
response.end('Not found'); //웹브라우저에게 Not found를 보여주도록 한다
}
}