생활코딩

Coding Everybody

에러처리

토픽 생활코딩 > WEB > WEB2 - Node.js > Node.js - Express

수업소개

에러가 발생했을 때 처리하는 방법을 소개합니다. 

 

 

 

강의

 

 

 

소스코드

변경사항

main.js

var express = require('express')
var app = express()
var fs = require('fs');
var path = require('path');
var qs = require('querystring');
var bodyParser = require('body-parser');
var sanitizeHtml = require('sanitize-html');
var compression = require('compression')
var template = require('./lib/template.js');

app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(compression());
app.get('*', function(request, response, next){
  fs.readdir('./data', function(error, filelist){
    request.list = filelist;
    next();
  });
});

//route, routing
//app.get('/', (req, res) => res.send('Hello World!'))
app.get('/', function(request, response) { 
  var title = 'Welcome';
  var description = 'Hello, Node.js';
  var list = template.list(request.list);
  var html = template.HTML(title, list,
    `
    <h2>${title}</h2>${description}
    <img src="/images/hello.jpg" style="width:300px; display:block; margin-top:10px;">
    `,
    `<a href="/create">create</a>`
  ); 
  response.send(html);
});

app.get('/page/:pageId', function(request, response, next) { 
  var filteredId = path.parse(request.params.pageId).base;
  fs.readFile(`data/${filteredId}`, 'utf8', function(err, description){
    if(err){
      next(err);
    } else {
      var title = request.params.pageId;
      var sanitizedTitle = sanitizeHtml(title);
      var sanitizedDescription = sanitizeHtml(description, {
        allowedTags:['h1']
      });
      var list = template.list(request.list);
      var html = template.HTML(sanitizedTitle, list,
        `<h2>${sanitizedTitle}</h2>${sanitizedDescription}`,
        ` <a href="/create">create</a>
          <a href="/update/${sanitizedTitle}">update</a>
          <form action="/delete_process" method="post">
            <input type="hidden" name="id" value="${sanitizedTitle}">
            <input type="submit" value="delete">
          </form>`
      );
      response.send(html);
    }
  });
});

app.get('/create', function(request, response){
  var title = 'WEB - create';
  var list = template.list(request.list);
  var html = template.HTML(title, list, `
    <form action="/create_process" method="post">
      <p><input type="text" name="title" placeholder="title"></p>
      <p>
        <textarea name="description" placeholder="description"></textarea>
      </p>
      <p>
        <input type="submit">
      </p>
    </form>
  `, '');
  response.send(html);
});

app.post('/create_process', function(request, response){
  var post = request.body;
  var title = post.title;
  var description = post.description;
  fs.writeFile(`data/${title}`, description, 'utf8', function(err){
    response.writeHead(302, {Location: `/?id=${title}`});
    response.end();
  });
});

app.get('/update/:pageId', function(request, response){
  var filteredId = path.parse(request.params.pageId).base;
  fs.readFile(`data/${filteredId}`, 'utf8', function(err, description){
    var title = request.params.pageId;
    var list = template.list(filelist);
    var html = template.HTML(title, list,
      `
      <form action="/update_process" method="post">
        <input type="hidden" name="id" value="${title}">
        <p><input type="text" name="title" placeholder="title" value="${title}"></p>
        <p>
          <textarea name="description" placeholder="description">${description}</textarea>
        </p>
        <p>
          <input type="submit">
        </p>
      </form>
      `,
      `<a href="/create">create</a> <a href="/update?id=${title}">update</a>`
    );
    response.send(html);
  });
});

app.post('/update_process', function(request, response){
  var post = request.body;
  var id = post.id;
  var title = post.title;
  var description = post.description;
  fs.rename(`data/${id}`, `data/${title}`, function(error){
    fs.writeFile(`data/${title}`, description, 'utf8', function(err){
      response.redirect(`/?id=${title}`);
    })
  });
});

app.post('/delete_process', function(request, response){
  var post = request.body;
  var id = post.id;
  var filteredId = path.parse(id).base;
  fs.unlink(`data/${filteredId}`, function(error){
    response.redirect('/');
  });
});

app.use(function(req, res, next) {
  res.status(404).send('Sorry cant find that!');
});

app.use(function (err, req, res, next) {
  console.error(err.stack)
  res.status(500).send('Something broke!')
});

app.listen(3000, function() {
  console.log('Example app listening on port 3000!')
});

 

댓글

댓글 본문
  1. 에러 처리!
  2. Hojun Song
    2023-04-20 목
  3. 감자
    22.12.22
  4. 당당
    2022.11.19
  5. 케굴
    2022-01-02
  6. 민수
    err값이 있는 경우,
    nodejs는 인자가 4개인 함수가 등록되어 있는 미들웨어를 호출하도록 약속 되어있다.
  7. jeisyoon
    2021.03.15 에러처리 - OK
  8. hanel_
    21.2.25
  9. 김지호
    21 01 08
  10. 생활둘기
    2021 1 4
  11. 콜라
    20201025완료
  12. Yong Hyun Lee
    완료 201003
  13. 전주호
    완료
  14. ldhan0715
    20-09-15
  15. 뚜루뚜루뚭
    감사합니다
  16. 쑤우
    수강완료. 감사합니다~
  17. 파이어뱃
    error handling

    -path가 존재하지 않을 때
    가장 마지막의 미들웨어 작성
    app.use(function(req,res,next){
    res.status(404).send('File Not Found');
    });

    -path뒤의 semantic query string이 잘못되었을 때
    해당 미들웨어에서 Exception 처리
  18. 강다리
    완료
  19. 굼벵이
    완료
  20. Specialist
    왜 next가 정의 되지 않았다고 나오는지 모르겠네요.....
    ▷ 유튜브 댓글 보고 해결했네요... next 매개변수를 추가했어야 했는데 안해서 그랬네요,.... 이런 실수를...
  21. jo_onc
    예외처리 중요하죠!
    강의 감사합니다!
  22. 레이까뇽
    강의 도중 미들웨어

    app.use(function(err, request, response, next){
    console.error(err.stack)
    response.status(500).send('Something broke!')
    });


    app.use(function(request, response, next){
    response.status(404).send('Sorry Cant find that!');
    }) 밑에 두어야 한다고 하셨는데 무슨 이유 떄문인가요? (위로 넣어도 작동은 하는거 같아서 여쭤봅니다..)
  23. 연수아빠
    유익한 강의 였습니다.
  24. HELLO
    next 가 정의 되지 않았다네요.
    콜백인자에 next 가 있는지 확인해보세요..!
    대화보기
    • Park
      if(err){
      next(err);->이 부분에서

      ReferenceError: next is not defined
      at ReadFileContext.callback

      에러가 발생하면서 http://localhost......와 같은 없는 파일을 입력하면 'Something broke!'가 뜨지 않는데, 혹시 뭐가 잘못 되었을까요?ㅠㅠ