ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Node.js 기본] Home 및 404 Not Found 구현
    Node.js/nodeJS 기본 2022. 12. 12. 19:36
    반응형

     

    writeHead()의 각 인자에 대한 설명은 아래와 같다.

    • 200 : indicates that the request was successful and the server is sending back a response with the requested data.
    • 404 : indicates that the requested resource was not found on the server.

     

        아래 코드는 request.url을 두 번째 인자를 true(query 객체화)로 파싱하여 루트 path인 "/"에 home을, "/"에서 query를 통해 페이지의 변화를 주었다. 또한 루트 path "/" 외의 경우는 잘못된 접근으로 취급하여 상태코드 404를 writeHead의 인자로 주었다.

     

    let http = require("http");
    let URL = require("url");
    
    let app = http.createServer(function (request, response) {
      let url = request.url; //ex. "/main?id=home"
      let parse = URL.parse(url, true);
      let pathname = parse.pathname;
      let query = parse.query;
    
      if (pathname == "/") {
        // home
        response.writeHead(200);
        response.end(template(query));
      } else {
        // 404 not found
        response.writeHead(404);
        response.end("404 not found");
      }
    });
    
    app.listen(3000);
    
    let template = function (query) {
      return `
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8" />
          <meta http-equiv="X-UA-Compatible" content="IE=edge" />
          <meta name="viewport" content="width=device-width, initial-scale=1.0" />
          <title>Document</title>
        </head>
        <body>
          <h1>${query.id ? query.id : "Home"}</h1>
          <ul>
            <li><a href="./">Home</a></li>
            <li><a href="./?id=B">B</a></li>
            <li><a href="./?id=C">C</a></li>
            <li><a href="./?id=D">D</a></li>
          </ul>
        </body>
      </html>
      `;
    };

      

      따라서, domain으로 접속시 아래와 같이 출력되며, 각 링크에 접속시 query가 추가되어 h1 태그의 내용이 변경된다.

     

     

      Home 클릭 시 (root domain 연결)

     

      B 클릭시( /?id=B 연결)

     

      C 클릭시( /?id=B 연결)

     

      잘못된 주소로 접근시(response가 정의되지 않은 주소로 접근시)

      이 예시에서 알 수 있듯이 response가 정의되지 않은 주소일 뿐 오류가 아니며, 파싱된 URL에서 pathname, query등은 각각 /main, null일 뿐 존재한다. 즉, 할당된 도메인에 접속하는 경우 클라이언트가 어떤 query, path를 입력하던지 이는 서버로 전달된다는 것이다.

     

      위코드는 루트 path인 경우에 입력된 query에 맞추어 페이지를 출력하는 것인데 만약 query를 임의로 준다면 아래와 같이 의도치 않은 페이지 출력 또한 가능하다.

     

    반응형

    댓글

Designed by Tistory.