[Node.js] Not found 구현, HTTP 상태 코드

🍀·2022년 3월 11일
0

Node.js

목록 보기
2/7
post-thumbnail

(생활 코딩 node.js 14~19.1)

Not found 구현

사용자가 root로 접근했는지 아닌지 구분하여 구현한다.

var url = require('url'); //url 모듈 사용
var _url = request.url; //url 값이 들어간다.

console.log(url.parse(_url, true)); //주어진 url 정보를 분석

<실행 결과>
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'
}

  • path: 쿼리 스트링
  • pathname: 쿼리 스트링을 제외한 루트

main.js에 적용

var http = require('http');
var fs = require('fs');
var url = require('url'); //url 모듈 사용
var app = http.createServer(function(request,response){
    var _url = request.url; //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){ //불러온 내용을 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 { //쿼리 스트링의 값이 
      response.writeHead(404); //파일을 찾을 수 없음
      response.end('Not found');
    }

});

이 때 (http://localhost:3000/fffffffffff) 주소로 접근하면 not found가 출력된다.

  • (http://localhost:3000/fffffffffff) 이 주소도 루트로 접근한 것이 아닌가? '/'이 포함되어 있는데???
  • (http://localhost:3000/fffffffffff) 이 주소에서의 pathname은 '/'이 아닌 '/fffffffffff'이 된다!
  • console.log(url.parse(_url, true)); 이 코드로 분석한 결과
  • Url {
    protocol: null,
    slashes: null,
    auth: null,
    host: null,
    port: null,
    hostname: null,
    hash: null,
    search: null,
    query: [Object: null prototype] {},
    pathname: '/fffffffffff',
    path: '/fffffffffff',
    href: '/fffffffffff'
    }

HTTP 상태 코드

간단하게 알아보기

  • 1xx (조건부 응답): 요청이 수신되어 프로세스를 계속한다
  • 2xx (성공): 요청을 성공적으로 받아 처리했다
  • 3xx (리다이렉션): 요청을 마치기 위해 추가 행동이 필요하다
  • 4xx (클라이언트 오류): 요청이 잘못되어 요청을 처리할 수 없다
  • 5xx (서버 오류): 서버가 유효한 요청을 처리하는 데 실패했다

자주 볼 수 있는 상태 코드

  • 400 Bad Request (잘못된 요청)
    잘못된 문법으로 인해 서버가 요청을 이해할 수 없는 경우.

  • 403 Forbidden (거부됨)
    클라이언트가 콘텐츠에 접근할 권리를 가지고 있지 않을 경우. 한 웹 서비스의 일반 유저가 어드민 페이지에 접속을 시도한다거나, 특정 IP나 국가가 차단되어 있는 사이트에 접속을 시도할 때 이를 거절하기 위한 응답.

  • 404 Not Found (찾을 수 없음)
    서버가 요청받은 리소스를 찾을 수 없는 경우. ‘서버를 찾을 수 없다’는 게 아니라, 서버와 통신은 되지만 요청한 바를 찾을 수 없다는 뜻.

  • 500 Internal Server Error (내부 서버 에러)
    서버가 처리 방법을 모르는 상황과 마주쳤지만, 서버가 처리 방법을 알 수 없을 경우. 서버에 오류가 발생해 작업을 수행할 수 없을 때 나타나는 코드.

  • 502 Bad Gateway (불량 게이트웨이)
    서버가 요청을 처리하는 데 필요한 응답을 얻기 위해 게이트웨이로 작업하는 동안 잘못된 응답을 받았다는 뜻. > 보통 서버에 접속하는 사람이 많을 때!

  • 503 Service Unavailable (일시적으로 이용할 수 없음)
    서버가 요청을 처리할 준비가 되지 않았음. 보통은 유지보수를 위해 작동을 중단했거나 과부하 상태가 된 서버로 인해 발생하는 코드.

  • 504 Gateway Timeout (게이트웨이 시간 초과)
    게이트웨이가 연결된 서버로부터 응답을 적절한 시간 내에 받을 수 없었다는 뜻.

(출처: https://www.inflearn.com/pages/weekly-inflearn-23?utm_source=pinpoint&utm_medium=email&utm_campaign=weekly-inflearn&utm_content=23)

0개의 댓글