에러처리
홈페이지를 구현하다보면 응답해야할 페이지가 없는경우
에러가 발생하게되는데
이런 경우 에러를 처리하는 방법에 대해 살펴보자
404 not find error
일단 우리가 가장 흔히 볼 수 있는 에러는
존재하지않는 페이지를 찾았을때 발생하는 에러이다.
이럴 경우
미들웨어 제일 끝에 다음과같은 미들웨어를 추가해주면 된다.
app.use(function (request, response, next) {
response.status(404).send('Sorry cant find that!');
});
미들웨어가 순차적으로 진행되다가 최종적으로 페이지를 못찾았을때
실행되도록 하기 위함이다.
error handling middleware
아래 예시를 살펴보자
fs.readFile을 했을때 디렉토리에 없는 파일이 호출되었을경우,
불러올 파일이 없기에 에러가 발생하는데
이런 경우 콜백함수의 첫번째 인자로 err객체가 전달되도록 약속되어있다.
전달된 err객체를 next()를 통해받아
다음과 같이 브라우져쪽으로 에러발생을 알린다.
next(err)라고 되어있으면 에러를 던지는것!
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);
}
});
});
next() 의 값에 아무값도 주지않으면 정상적인 상황이고 다음미들웨어를 호출하는것
next('route') 또한 정상적인 상황, 다음미들웨어중에서 같은 인자가 아닌것으로 넘어가는것
그 외에 데이터가 들어오면 그것은 '에러' 라는 약속이 체결되어있음
Writing Error Handlers
에러메시지가 화면에 출력되는 방식을 바꾸고싶으면
다음 미들웨어를 미들웨어들중 가-장 밑에 (404처리하는 미들웨어 보다도 밑에) 넣어준다.
app.use(function (err, request, response, next) {
console.error(err.stack)
response.status(500).send('Something broke!')
});
에러핸들링을 하는 미들웨어는,
첫번째 인자에 next()로부터 전달받을 err데이터가 담기고 4개의 인자를 갖고있다.
4개의 인자를 갖고있는 함수는 Express안에서 '에러를 핸들링하는 미들웨어' 라고 약속이 되어있다.
다음과같이 처리하면 브라우져쪽에는 Something broke!라는 메시지가 출력이 되고
console창에도 다음과 같이 출력이 된다.
'Node.js' 카테고리의 다른 글
Node.js 보안 Security Best Practices (0) | 2021.05.27 |
---|---|
Node.js express.Router (0) | 2021.05.27 |
Node.js Express 정적인 파일 서비스 (0) | 2021.05.22 |
Node.js 미들웨어 (0) | 2021.05.21 |
Node.js 미들웨어 compression 사용법 (0) | 2021.05.20 |
댓글