반응형
https://expressjs.com/en/guide/error-handling.html
코드 마지막에 에러를 처리하는 코드를 추가한다.
app.use((req, res, next) => {
res.status(404).send('Sorry can\'t find that!');
});
그리고 글 목록에 접속할 때 없는 파일에 경우에 undefind가 아닌 에러 페이지가 출력되도록 해보자.
app.get('/page/:pageId', (req, res, next) => {
// next()를 사용하여 error인자를 넘겨줄 것이기 때문에 next를 인자로 추가한다.
var filteredId = path.parse(req.params.pageId).base;
fs.readFile(`data/${filteredId}`, 'utf8', (err, description) => {
if(err) {
next(err);
} else {
var title = req.params.pageId;
var sanitizedTitle = sanitizeHtml(title);
var sanitizedDescription = sanitizeHtml(description, {
allowedTags:['h1']
});
var list = template.list(req.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>`
);
res.send(html);
}
});
});
app.use((req, res, next) => {
res.status(404).send('Sorry can\'t find that!');
});
app.use((err, req, res, next) => {
console.log(err.stack);
res.status(500).send('Something broke!');
});
에러 핸들링 코드의 순서가 바뀌면 안된다.
에러가 있으면 if(err)에 걸려서 next()에 err 객체를 인자로 넘겨준다. 그러면 코드 마지막에 404에러 뒤에 추가한 4개의 인자를 가지는 미들웨어가 호출된다. 4개의 인자 error, request, response, next를 가지는 미들웨어는 에러를 핸들링하는 미들웨어로 약속되어있다.
따라서 에러가 있는 경우에는 next를 호출할 때 error를 인자로 주어서 4개의 함수가 등록되어 있는 미들웨어를 호출하고, 이 미들웨어가 동작하면서 최종적으로 에러처리를 할 수 있다.
설정한 문구가 화면에 출력되고, 콘솔에는 해당 'test'라는 파일이 없다고 error stack을 출력한다.
반응형
'프로젝트 > 니랑내랑' 카테고리의 다른 글
REST API 1. REST API란? (0) | 2020.02.20 |
---|---|
Express 10. 라우터 분리하기 (0) | 2020.02.20 |
Express 8. 정적인 파일 서비스 (0) | 2020.02.19 |
Express 7. 미들웨어 만들기 (0) | 2020.02.19 |
Express 6. 미들웨어 사용하기 compression (0) | 2020.02.19 |