(정보를 처리하는 핵심적인 방법 그 중 파일 읽어오기)
var fs = require('fs');
fs.readFile('sample.txt', 'utf8', function(err, data){
console.log(data);
});
fs모듈을 불러오고 readFile로
같은 디렉토리 위치에 있는 sample.txt를 읽어서 console에 띄움
다음은 쿼리스트링으로 값을 받아 그 값에 대응하는 파일을 띄우는 코드이다.
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 title = queryData.id;
if(_url == '/'){
title = 'Welcome';
}
if(_url == '/favicon.ico'){
return response.writeHead(404);
}
response.writeHead(200);
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.end(template);
})
});
app.listen(3000);
fs.readFile 함수안에서 사용자가 보낸 id에 맞는 txt파일을 불러오고 discrpition 변수에 저장하는 것 같다. 특이한 것은 readFile은 id에 맞는 데이터를 변수에 저장하는 역할만 하고 함수 종료후에 밖에서 response를 보낼 줄 알았는데 readFile함수 안에서 response를 보낸다. 그 요청에 대한 정보처리가 끝남과 동시에 바로 response를 하기 때문에 더 간결한 것 같기도 하다. = 동적인 느낌? 하나의 페이지 안에서 요청마다 따로 reponse를 하니까
쿼리 데이터를 변경해서 요청할 때 마다 node에서 파일을 읽어오기 때문에 파일 수정시에 서버를 재가동 하지 않아도 잘 작동한다.
이렇게 디렉토리를 읽어서 안에 있는 파일들을 리스트로 받아와 사용할 수 있다.