공부 저장소/Node.js

[생활코딩 Node.js] 7. 에러 페이지 만들기

tipsygypsy 2022. 7. 31. 20:44

404 not found 구현하기

접속 url을 확인하여 없는 페이지에 접속했을 때 에러 페이지를 띄울 수 있도록 한다.

이를 위하여 먼저 url 정보를 어떻게 가져오는지 확인해 본다.

var http = require('http');
var fs = require('fs');
var url = require('url'); //url모듈 사용

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

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

//중간 생략

});
app.listen(5000);

위와 같이 url.parse의 내용을 콘솔로 찍어 보면 다음과 같이 출력된다

Url {
  protocol: null,
  slashes: null,
  auth: null,
  host: null,
  port: null,
  hostname: null,
  hash: null,
  search: '?id=CSS',
  query: [Object: null prototype] { id: 'CSS' },
  pathname: '/',
  path: '/?id=CSS',
  href: '/?id=CSS'
}

이 중 pathname은 / 뒤의 path 내용 중 query string을 제외한 것인데, 존재하지 않는 pathname인 경우에는 404를 리턴하고 not found를 화면에 출력하도록 main.js를 수정해 본다.

var http = require('http');
var fs = require('fs');
var url = require('url'); //url모듈 사용

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

    if(pathname === '/'){
      fs.readFile(`data/${title}`, 'utf-8', 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>
        <ol>
          <li><a href="/?id=HTML">HTML</a></li>
          <li><a href="/?id=CSS">CSS</a></li>
          <li><a href="/?id=JavaScript">JavaScript</a></li>
        </ol>
        <h2>${title}</h2>
        <p>${description}</p>
      </body>
      </html>
      `;
      response.writeHead(200);
      response.end(template);
    });
  } else {
    // 존재하지 않는 pathname일 경우 에러처리
    response.writeHead(404);
    response.end('Not found');
  }

});
app.listen(5000);