nodejs

ํ•จ์ˆ˜ ์ ์šฉํ•˜์—ฌ ์ฝ”๋“œ ์ •๋ฆฌ

byeol_dev 2023. 8. 23. 15:43

์ด์ „์— ์ž‘์„ฑํ•œ main.js ์ฝ”๋“œ ์ •๋ฆฌ

ํ•จ์ˆ˜ ์ž‘์„ฑํ•˜์—ฌ ์ค‘๋ณต์ฝ”๋“œ ์ œ๊ฑฐ

var http = require('http');
var fs = require('fs');
//url์ด๋ผ๋Š” ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๋Š” ์ฝ”๋“œ
var url = require('url');

//๋ณธ๋ฌธ ๋ถ€๋ถ„ ํ•จ์ˆ˜๋กœ ์„ค์ •ํ•˜์—ฌ ์ค‘๋ณต ์ œ๊ฑฐ
//title, list, body๊ฐ’์„ ๋ฐ›์•„ html์— ๋ฐ˜์˜
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>
  `;
}

//ํŒŒ์ผ ๋ฆฌ์ŠคํŠธ ๋ถˆ๋Ÿฌ์™€์„œ ๊ธ€๋ชฉ๋ก ์ƒ์„ฑ ํ•จ์ˆ˜
//dataํด๋”์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ›์•„์™€ 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 = i + 1
  }
  list = list +'</ul>';
  return list;
}

//url์—์„œ ๋ฐ์ดํ„ฐ ๋ฐ›๊ธฐ
//query, pathname์„ ๋ฐ›์•„์˜ด
//query๊ฐ’์„ id๋ฅผ ํฌํ•จํ•œ ๊ฒฝ๋กœ
//pathname์€ ๊ฒฝ๋กœ
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


  console.log(url.parse(_url, true).pathname);
  if(pathname === '/'){
    //ํ™ˆ ๋ถ€๋ถ„ ์„ค์ •
    if(queryData.id === undefined){
      //ํŒŒ์ผ ๋ฆฌ์ŠคํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ
      //readdir๋กœ dataํด๋” ์•ˆ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ด
      fs.readdir('./data', function(error, filelist){
        console.log(filelist);
        //์›นํŽ˜์ด์ง€์— ๋ณด์—ฌ์ค„ ์ฝ”๋“œ
        var title = 'Welcome';
        var description = 'Hello, node.js';
        
        //ํŒŒ์ผ ๋ฆฌ์ŠคํŠธ๋กœ ๊ธ€๋ชฉ๋ก ํ‘œ์‹œํ•˜๊ธฐ
 		//์œ„์—์„œ ์ž‘์„ฑํ•œ ๋ณธ๋ฌธ ํ•จ์ˆ˜, ๊ธ€๋ชฉ๋ก ์ƒ์„ฑ ํ•จ์ˆ˜ ํ˜ธ์ถœ
        var list = templateList(filelist);
        var template = templateHTML(title, list, `<h2>${title}</h2>${description}`);
        
        response.writeHead(200);
        response.end(template);
        //()์•ˆ์— ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ๋„ฃ๋ƒ์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ
      })


    } else{
      fs.readdir('./data', function(error, filelist){
        console.log(filelist);
        //์›นํŽ˜์ด์ง€์— ๋ณด์—ฌ์ค„ ์ฝ”๋“œ
        //์ฟผ๋ฆฌ์ŠคํŠธ๋ง์— ๋”ฐ๋ผ ํŒŒ์ผ๋ช… ์ƒ์„ฑ                            ๋ณธ๋ฌธ ๋‚ด์šฉ
        fs.readFile(`data/${queryData.id}`, 'utf8', function(err, description){
          //์›นํŽ˜์ด์ง€์— ๋ณด์—ฌ์ค„ ์ฝ”๋“œ
          var title = queryData.id;
          //ํŒŒ์ผ ๋ฆฌ์ŠคํŠธ๋กœ ๊ธ€๋ชฉ๋ก ํ‘œ์‹œํ•˜๊ธฐ
          var list = templateList(filelist);
          var template = templateHTML(title, list, `<h2>${title}</h2>${description}`);
          response.writeHead(200);
          response.end(template);
          //()์•ˆ์— ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ๋„ฃ๋ƒ์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ
        });
      });
    }
  }else{
    //ํŒŒ์ผ์ด ์„œ๋ฒ„ ์ฐพ์„ ์ˆ˜ ์—†์„ ๋•Œ
    response.writeHead(404);
    response.end('Not found');
  }

});
app.listen(3000);