본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JavaScript/Node.js

fs.readdir, 파일목록 본문출력하기

Node.js를 사용해 동적으로 파일을 읽어와 웹페이지를 생성한다.

fs.readdir 파일리스트를 가져와 id에 따라 링크와 txt를 달리한다.

var http = require('http');
var fs = require('fs');
var url = require('url');

// HTTP 서버를 생성합니다. 요청을 처리하는 콜백 함수를 전달합니다.
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 === '/'){
        // id가 정의되지 않은 경우
        if(queryData.id === undefined){
            // data 디렉토리에서 파일 목록을 읽어옵니다.
            fs.readdir('./data', function(error, filelist){
                var title = 'Welcome';
                var description = 'Hello, Node.js';
                var list = '<ul>';
                
                // 파일 목록을 순회하면서 각 파일에 대한 링크를 생성합니다.
                for(var i = 0; i < filelist.length; i++){
                    list += `<li><a href="/?id=${filelist[i]}">${filelist[i]}</a></li>`;
                }
                
                list += '</ul>';
                
                // 템플릿을 생성하고 응답을 보냅니다.
                var template = `
                <!doctype html>
                <html>
                <head>
                  <title>WEB1 - ${title}</title>
                  <meta charset="utf-8">
                </head>
                <body>
                  <h1><a href="/">WEB</a></h1>
                  ${list}
                  <h2>${title}</h2>
                  <p>${description}</p>
                </body>
                </html>
                `;
                response.writeHead(200);
                response.end(template);
            });
        } 
        // id가 정의된 경우
        else {
            // 해당 id에 해당하는 파일을 읽어옵니다.
            fs.readFile(`data/${queryData.id}`, 'utf8', function(err, description){
                // 파일을 읽어와 템플릿을 생성합니다.
                var title = queryData.id;
                var template = `
                <!doctype html>
                <html>
                <head>
                  <title>WEB1 - ${title}</title>
                  <meta charset="utf-8">
                </head>
                <body>
                  <h1><a href="/">WEB</a></h1>
                  <a href="/">돌아가기</a>
                  <h2>${title}</h2>
                  <p>${description}</p>
                </body>
                </html>
                `;
                response.writeHead(200);
                response.end(template);
            });
        }
    } 
    // 루트 이외의 경로로 요청이 들어온 경우
    else {
        // 404 오류를 반환합니다.
        response.writeHead(404);
        response.end('Not found');
    }
});

// 서버가 지정된 포트(3000)에서 요청을 수신하도록 설정합니다.
app.listen(3000);