본문 바로가기
  • 실행력이 모든걸 결정한다
Node.js/Express

[Express] 에러 처리

by 김코더 김주역 2021. 7. 29.
반응형

HTTP 상태 코드별로 에러 처리를 할 수도 있다.

다른 말로는, 에러 페이지를 커스터마이징한다고도 할 수 있을 것 같다.

 

※ HTTP 상태 코드 모음

https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C

 

HTTP 상태 코드 - 위키백과, 우리 모두의 백과사전

아래는 HTTP(하이퍼텍스트 전송 프로토콜) 응답 상태 코드의 목록이다. IANA가 현재 공식 HTTP 상태 코드 레지스트리를 관리하고 있다. 모든 HTTP 응답 코드는 5개의 클래스(분류)로 구분된다. 상태 코

ko.wikipedia.org

 

다음과 같은 방법으로, 특정 상태 시 여러분이 커스터마이징한 페이지로 이동시킬 수 있다.

res.status([HTTP 상태 코드]).render([View 파일]);

 

다음 예제는 404, 500 에러를 처리하는 간단한 예제이다.

여러분이 주목할 것은 error_404.ejs, error_500.ejs 파일이다.

 

404 에러는 서버가 요청한 페이지를 찾을 수 없을 경우고, 500 에러는 내부 서버에 에러가 생길 경우다.

먼저, 404 에러를 발생시키기 위해 요청을 처리하지 않는 URL에 접속할 것이다.

그리고, 500 에러를 발생시키기 위해 next() 메소드에 'route'가 아닌 다른 내용을 넣어서 에러를 발생시킬 것이다. 이렇게 next()로 오류가 발생되면, 이 경우에는 에러를 처리하는 미들웨어로 건너뛰게 된다.

 

 

<app.js>

에러 처리 미들웨어는 에러가 발생한 부분의 뒤쪽에 넣어야 정상적으로 동작한다.

const express = require('express')
const bodyParser = require('body-parser')
const ejs = require('ejs')
const app = express()

app.set("view engine", "ejs")
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))
app.use('/static', express.static('static'))


app.get('/hello', function(req,res){ // 일반적인 요청 처리
    res.render('home');
})

app.get('/trouble', function(req,res,next){ // 에러 유발
    next(err);
})


app.use(function(req, res, next) { // 404 : Not Found 에러
    res.status(404).render('error_404'); //★
})

app.use(function(err, req, res, next) { // 500 : 내부 서버 에러
    res.status(500).render('error_500'); //★
})

app.listen(3000, ()=>console.log('Example app listening on port 3000!'))

 

<error_404.ejs>

<!doctype html>
<html>
    <head>
        <title>send</title>
    </head>
    <body>
        <h1>404 error page!</h1>
    </body>
</html>

 

<error_500.ejs>

<!doctype html>
<html>
    <head>
        <title>send</title>
    </head>
    <body>
        <h1>500 error page!</h1>
    </body>
</html>

 

 

결과

1) 404 에러 -> "http://localhost:3000/hi" 접속

2) 500 에러 -> "http://localhost:3000/trouble" 접속

반응형

댓글