Node.js

App - Not found 오류 구현

수업소개

존재하지 않는 정보에 대한 요청이 들어왔을 때 Not found 오류 메시지를 전송하는 방법을 알아봅니다. 

 

 

 

강의

 

 

 

소스코드

main.js

변경사항

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;
    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);
        response.end(template);
      });
    } else {
      response.writeHead(404);
      response.end('Not found');
    }



});
app.listen(3000);

 

댓글

댓글 본문
  1. 리다
    20200713
  2. 불스택
    20.07.10 완료
    감사합니다
  3. 영호팍
    console.log(request.url);을 사용했을 때 나오는 것 같아요. 그래서 저도 님 댓글 보고 궁금해서 console.log(request);로 하고 cmd 실행봤는데 여러 정보가 뜨더라고요. 보니까 url값이 html에서만 2개가 발견 되더라고요. javascript와 css는 이미지 파일이 없어서 1개만 뜹니다. 제가 생각하기에는 html이 이미지를 머금고 있어서 url이 2개가 뜬게 아닐까요!!
    대화보기
    • 영호팍
      출석스
    • Amousk
      좋은강의 감사합니다.
    • 임승원
      HTML로 들어갈 때는 pathname가 '/'이 아니라 '/coding.jpg' 인데
      1. 왜 얘만 /coding.jpg로 뜨는지
      2. 얘만 /coding.jpg로 뜸에도 불구하고 조건문에서 if (pathname==='/')에서 걸러지지 않고 내용이 잘 나오는지
      궁금합니다.
    • hoya
      2020.06.15
    • Katherine Roh
      완료 :)
    • 김보미
      완료
    • 김재익
      완료
    • 바다의왕자
      완료
    • 윤영훈
      오 감사합니다!
      대화보기
      • Kuk-Il Kim
        https://m.blog.naver.com......%2F

        해당 블로그를 참고하시면 path, pathname 등 url 포맷에 대한 이해를 높이실수 있습니다.
      • Eunsung Shin
        완료
      • 준바이
        2020 03 18
      • 어인
        제가 공부하고 이해하기로는

        'localhost:3000/' 에서 '/' 기호는 path(경로)의 시작을 알려줍니다.
        '/폴더/폴더/파일.확장자'를 통틀어 pathname이라고 하는 것 아닌가 생각합니다.

        '?' 기호는 query string의 시작을 알려줍니다.

        query string은 매개변수를 가질 수 있습니다.
        'id=HTML'도 하나의 매개변수이고, (name=value)의 형태입니다.
        query string에 여러개의 매개변수를 주고싶을 때는 '&' 기호를 사용합니다.
        그럼 '?id=HTML&(name=value)' 같은 형태가 되는 것입니다.!
        대화보기
        • 03.09 완료
        • eddylee123456
          복습
        • eddylee123456
          완료
        • Gritter
          감사합니다.
        • 리암
          감사합니다.
        • 스티븐잡숴
          완료
        • 차누누
          ?id= 만 붙여주면 페이지가 아무렇게나 써도 페이지가 출력이 되네영...
        • 임은정
          완료
          저도 댓글보고 생각도 못했던거 배워갑니당
        • ㅇㅇ
          저도 처음에 이게 이해가 안갔는데 직접 찍어보니까 이해가더라구요 유효하지 않은 값은 /뒤에 모든 값을 반환시킵니다
          대화보기
          • 파이어뱃
            2019_12_05 complete
          • codinginpain
            수강완료쓰
          • 블루
            제 생각에는 pathname 은 쿼리스트링(? 뒤에 붙는 값)만 뺀 값이라고 했으니까 /favicon.ico?이거나 /favicon.ico?id=333 이라면 pathname은 /favicon.ico가 맞는 것 같아요
            대화보기
            • 박창신
              수강완료
            • 쑤우
              수강완료. 감사합니다.
            • 굼벵이
              완료
            • 망고복숭아
              저 이해가 잘 안되는 부분이 localhost:3000/favicon.ico도 pathname은 똑같이 '/' 가 아닌가요??
            • 시계의온도
              저는 왜 console.log를 실행했을때 cmd에 아무것도 안나올까요?
            • CronEB
              완료
            • YesterdayKite
              완료. 감사합니다!
            • 허공
              190510 감사합니다.
            • youngjin.lee
              Comlete
            • 위준우
              완료
            • 통신 MDP 좋아 ^_^
              완료했습니다 ^___________________________________________________^
            • 통신 MDP 너무 좋아 ^_^
              완료 ^______________________________________^
            • 자유로움
              완료
            • rangjin
              /?id= 뒤에 존재하지 않는 파일명을 입력했는데도 not found가 뜨지 않습니다. url.parse(_url, true)를 이용하여 확인해보니 파일이 존재하든, 존재하지 않든 pathname은 여전히 '/'이더군요. 이 경우는 어떻게 해결해야하나요??
            • ㄹㅈㅈ
              3/19 화
              여기까지 봄.
              not found 오류 구현
              if문을 이용해
              404를 넘겨줌
            • supernet
              완료
            • taek
              제가 개인적으로 생각했을땐, 파일경로가 제대로 되지 않은 것 같습니다. 어떻게 하셨는지 올려주시면 보고 조금이나마 도움을 드릴게요!
              대화보기
              • 궁금한게 있습니다.

                1. 저는 지금 본문 내용이 여전히 undefind로 나옵니다.

                2. 주소를 다른 걸로 해도 Not found가 뜨지 않구요. 그냥 기존 주소에 머물러 있습니다.

                이럴 경우 어떻게 해야 하나요?
              • Hyeonu Gwon
                자세히는 모르겠으나, 에러 처리를 따로 하지 않아서 그런 것 같습니다.
                이전에 지웠던
                if (err) throw err;
                코드를 넣으면 에러 메시지 Error: ENOENT: no such file or directory ... 를 볼 수 있습니다.
                undefinde 라는 이름의 파일을 만들지 않았으니까요.
                노드 서버는 다운 되고요 ㅎㅎ
                대화보기
                • john
                  프로그래머에게 허용된 비어있는 메모리 자료형은(프로그래머가 아무것도 없는 값으로 변수를 초기화 시키고 싶을 때)= null,
                  컴퓨터가 스스로에게 비어있음을 나타내는 자료형은 = undefind.
                  할당이 안된것 뿐이니 에러가 아니지요.
                  대화보기
                  • 호두
                    고맙습니다.
                  • 권문수
                    감사합니다 완료했습니다^^
                  버전 관리
                  egoing
                  현재 버전
                  선택 버전
                  graphittie 자세히 보기