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. Gritter
    감사합니다.
  2. 리암
    감사합니다.
  3. 스티븐잡숴
    완료
  4. 차누누
    ?id= 만 붙여주면 페이지가 아무렇게나 써도 페이지가 출력이 되네영...
  5. 임은정
    완료
    저도 댓글보고 생각도 못했던거 배워갑니당
  6. ㅇㅇ
    저도 처음에 이게 이해가 안갔는데 직접 찍어보니까 이해가더라구요 유효하지 않은 값은 /뒤에 모든 값을 반환시킵니다
    대화보기
    • 파이어뱃
      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
        완료
      • 제가 개인적으로 생각했을땐, 파일경로가 제대로 되지 않은 것 같습니다. 어떻게 하셨는지 올려주시면 보고 조금이나마 도움을 드릴게요!
        대화보기
        • 궁금한게 있습니다.

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

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

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

              Home server - 인터넷의 원리를 알려드립니다.
              https://opentutorials.org......265

              DNS - 도메인의 원리와 적용방법을 알려드립니다.
              https://opentutorials.org......276
            • 박유
              이고잉님 질문이 있습니다! 현재 node.js를 실습중인 폴더 외에 새로운 폴더에 새로운 서버를 만들어서 개인적으로 실습 프로젝트를 진행하고 싶은데요. 저희 수업에서는 주소창에 localhost:3000을 입력하면 웹브라우저가 실행이 되는데 추가적으로 만든 서버의 경우 주소창에 어떤 주소를 입력해야 하는지 궁금합니다.
            • CopyX
              오류가 발생하지 않은것은 아닙니다.
              다만 err 라는 변수를 console.log(err); 로 출력해보면

              { Error: ENOENT: no such file or directory, open 'C:\Users\copyx\Workspace\js_projects\WEB2 - Node.js\data\undefined'
              at Error (native)
              errno: -4058,
              code: 'ENOENT',
              syscall: 'open',
              path: 'C:\\Users\\copyx\\Workspace\\js_projects\\WEB2 - Node.js\\data\\undefined' }

              이런 메시지가 있는 것을 확인할 수 있으며, data 인자에는 아무것도 들어있지 않으므로 undefined 가 들어가 있는 것이죠.

              해당 에러에 대한 처리를 아무것도 하지 않았기때문에 페이지는 정상적으로 뜨는 것으로 생각됩니다.
              대화보기
              • Gimme_Gsuit
                저도 밑에 분하고 같네요. 답변 부탁드립니다.
              • moon
                감사합니다.
              • Seo Yun Seok Tudoistube
                fs.readFile(`data/${queryData.id}`, 부분에서 queryData.id 가 undefined 이면 err 오류가 발생해야 할거 같은데 그냥 '/' 페이지가 정상적으로 떠서 이유 궁금합니다.
                감사합니다.
              버전 관리
              egoing
              현재 버전
              선택 버전
              graphittie 자세히 보기