본문 바로가기

Back-End/Node.js

Node.js.19.1. App 제작 - Not found 구현

반응형

목표

사용자가 목록에 있는 주소(HTML, CSS, JavaScript) 외의 경로로 사이트를 들어온 경우, 오류 메시지를 사용자에게 전송하는 기능 만들기

 


사용자가 root로 접근했는지, 아닌지 구분해야 한다.

    *root상태: path가 붙지 않은 현재 상태 '/'

 

console.log(url.parse(_url, true));

현재 url을 분석하는 코드에 어떤 내용이 담겨있는지 알아보자.

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

var app = http.createServer(function(request,response){
    var _url = request.url;
    var queryData = url.parse(_url, true).query;
    var title = queryData.id;

    console.log(url.parse(_url, true));

    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.writeHead(200);
    response.end(template);
    })
});
app.listen(3000);

출력 결과를 보면, pathname으로 root인지 아닌지를 알 수 있다. 이를 이용하여 코드를 재작성해보자.

 

  • response.writeHead(200) : 파일을 성공적으로 전송
  • response.writeHead(404) : 파일을 찾을 수 없음
var http = require('http');
var url = require('url');
var fs = require('fs');

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;
    var title = queryData.id;

    if(pathname === '/'){
      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.writeHead(200);  //200: 파일을 성공적으로 전송하였음
      response.end(template);
      })
    }else{
      response.writeHead(404);  //404: 파일을 찾을 수 없음
      response.end('Not found');
    }


});
app.listen(3000);

반응형