본문 바로가기
Back-End/node.js

Express module의 error handling

by blackjack_96 2022. 3. 2.

# 본 게시물은 egoing님의 생활코딩 강의를 복습하며 정리한 내용입니다

 

Express module의 Error Handling

 

const topic = require("./lib/topic.js");
const author = require("./lib/author.js");
const express = require("express");
const bodyParser = require('body-parser');
const compression = require('compression');
const db = require("./lib/db.js");
const app = express();


app.use(bodyParser.urlencoded({ extended: false }));
app.use(compression());
app.use(express.static('public'));

app.get('*', (request, response, next) => {
    db.query('SELECT * FROM topic',function(err,topics){
        if (err) {
            next(err);
        } else {
            request.topics = topics;
            console.log(topics);
            next();
        }
    });
});

app.get('/',topic.home);
app.get('/page/:pagetitle',topic.page);
app.get('/update/:pagetitle',topic.update);
	...
app.post('/author_delete_process',author.author_delete_process);

app.use(function(err, req, res, next) {
    console.error(err.stack);
    res.status(500).send('Something broke!');
});
// 17행과 같은 곳에서 error handling을 위하여 next(err)를 호출하게 되면
// 다음에 어떠한 middleware가 정의되었는지에 전혀 관계 없이
// 인자가 4개인 위와 같은 middleware를 실행시키게 되어 있다.
// 이 사실을 이용하여 error handling이 가능.

app.use(function(req, res, next) {
    res.status(404).send('Sorry cant find that!');
});
// 404를 처리하는 middleware의 경우는
// 내가 정의한 라우팅보다 맨 뒤쪽에 위치하도록 하여야 한다
// middleware는 정의한 순서대로 실행되기 때문이다.
// 만약 존재하지 않는 페이지를 서버가 요청받게 되면
// 쭉 타고 내려오다가 404에 해당되는 41라인의 middleware가 실행된다.


app.listen(3000,()=> console.log("Web Server listening on 3000..."));