ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Node.js - study part 2
    CodeingTestPrac 2022. 5. 13. 17:48

     

    1.비교연산자 특이  한점

    a == b.  좌 우 같아? 

    a === b 정확 하게 같나?

     

    2. parameter vs argument

    Parameter: 매개변수 

    ex)

    def fun(p1,p2):

         return p1

     

    ex)

    Argument: 전달 인자

    fun(a1)

     

    c 리눅스 프로그래밍에서 하는 것과 같은 arg 를 이용가능하다.

     

    var args = process.argv;
    console.log(args[2])
     node tmp.js egoing

    >> 출력 egoing ,      args[0] -> compiler, args[1] -> 실행할 프로그램 , args[2] -> 콘솔 입력 값

     

     

     

    3.

     java script 에서는 없는 값을 호출하면 undifined 을 반환한다.

     

    4. 웹페이지 이동 을 구성하는법 ,

     

    - 1.url 파싱, pathname 을 이용한다,

    홈페이지 == 루트 디렉 위치 가능 == '/'

    예외처리 404 도 해준다.

    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;
      if (pathname === '/') {
        if (queryData.id === undefined) 
        {
            var title = 'Welcome';
            var description = 'Hello, Node.js';
            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 {
          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>
                <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);

    ----------------------------------

    코드를 줄이는법 -> data file handling , -> file list 를 읽는 코드를 추가하자 

    const testFolder = './tests/';
    const fs = require('fs');
    
    fs.readdir(testFolder, (err, files) => {
      files.forEach(file => {
        console.log(file);
      });
    });

    >> 반환은 list 의 str 을 담은것으로 나온다

     

    데이터가 바뀌는데 있어서 로직이 변경이 되는것은 매우 비 효율적인 작동 방식이다.

     

    다음은 data 디렉토리에 있는 파일들을 일어 filelist 의 스트링 타입에 리스트에 넣고 

    이를 html 코드로 변환 해주는 로직이다. <ul>  태그로 감을 수 있다.

    fs.readdir('./data', function (error, filelist) {
            var title = 'Welcome';
            var description = 'Hello, Node.js';
            var list = '<ul>';
            var i = 0;
            while (i < filelist.length) {
              list = list + `<li><a href="/?id=${filelist[i]}">${filelist[i]}</a></li>`;
              i += 1;
            }
            list = list + '</ul>';

     

     

    최종 결과:

    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 += 1;
      }
      list = 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 = templateList(filelist);
              var template = templateHTML(title, list, `<h2>${title}</h2>${description}`);
              response.writeHead(200);
              response.end(template);
            })
          } else {
            fs.readdir('./data', function(error, 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);

     

    'CodeingTestPrac' 카테고리의 다른 글

    아니?!! 우리 gcp 비용이 17만원이라고 ?? 두둥  (1) 2023.03.09
    Node.js - study part 3  (0) 2022.05.13
    Node.js - study part 1  (0) 2022.05.13
    Node-js 그게 뭔디?  (0) 2022.05.06
    3월 10일 ,Flutter const vs final  (0) 2022.03.10
Designed by Tistory.