에러페이지 핸들링
Node.js의 Express 에서 에러 처리를 하려면 어떡헤 해야 할까?
아래의 방식이 내가 주로 사용하던 에러 핸들링 방식이다.
1 2 3 4 5 6 7 8 9
| app.get("/", function (req, res, next) { fs.readFile("/file-does-not-exist", function (err, data) { if (err) { next(err); } else { res.send(data); } }); });
|
try
, catch
를 사용해 에러처리를 하고 있다. 하지만 만약 엔드포인트가 계속해서 많아진다면? 에러 처리를 위해 반복 작성되는 코드가 매우 많아질 것이다.
Express는 이를 방지하기 위해 에러처리를 위한 미들웨어를 제공한다.
1 2 3 4 5 6 7
| function errorHandler(err, req, res, next) { if (res.headersSent) { return next(err); } res.status(500); res.render("error", { error: err }); }
|
인자 4개를 받는 함수가 에러핸들러 함수로 사용된다. 작성한 함수를 미들웨어로 지정하면 매 로직에 에러핸들링을 할 필요없이, 에러 발생을 확인하는 과정을 거치고 로직을 수행하게 된다.
따로 함수를 작성하지 않고 아래와 같은 방법으로 정의와 동시에 미들웨어 설정을 할 수도 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13
| var bodyParser = require("body-parser"); var methodOverride = require("method-override");
app.use( bodyParser.urlencoded({ extended: true, }) ); app.use(bodyParser.json()); app.use(methodOverride()); app.use(function (err, req, res, next) { });
|
그리고 위에서 지정한 함수를 그대로 미들웨어로 설정할 수도 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13
| var bodyParser = require("body-parser"); var methodOverride = require("method-override");
app.use( bodyParser.urlencoded({ extended: true, }) ); app.use(bodyParser.json()); app.use(methodOverride()); app.use(logErrors); app.use(clientErrorHandler); app.use(errorHandler);
|
후기
사실 아직 복잡한 구조를 보면 이해하는데 조금 시간이 걸린다. 실제로 다뤄봐야 제대로 알 수 있을 것 같다.