오도원입니다.

건강과 행복을 위하여

프로젝트/니랑내랑

Express 9. Error Handling

오도원공육사 2020. 2. 19. 17:08
반응형

https://expressjs.com/en/guide/error-handling.html

 

Express error handling

Error Handling Error Handling refers to how Express catches and processes errors that occur both synchronously and asynchronously. Express comes with a default error handler so you don’t need to write your own to get started. Catching Errors It’s important

expressjs.com

코드 마지막에 에러를 처리하는 코드를 추가한다.

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을 출력한다.

반응형