WEB3 - Express

에러처리

수업소개

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

 

 

 

강의

 

 

 

소스코드

변경사항

main.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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!'가 뜨지 않는데, 혹시 뭐가 잘못 되었을까요?ㅠㅠ
    공동공부
    graphittie 자세히 보기