본문 바로가기

Node.js/NPM

익스프레스의 각 라우트에 자동으로 예외처리를 해주는 모듈

클라이언트의 요청을 처리해주지 못하거나 예외적인 상황이 발생해 서버가 죽는 경우가 생길 수 있다.

사람들이 안 쓰는 앱이야 상관 없지만 인스타와 같은 앱의 서버가 멈춘다면 막대한 손해가 발생한다.

이를 막기 위해서 쉽게 떠올릴 수 있는 게 try, catch 문이다.

try로 감싼 코드가 실행되다가 오류나 예외적인 상황이 발생하면

catch로 빠져 이에 따른 대처를 할 수 있게 된다.

 

그러나 아래의 코드가 더 들어가 지저분해진다는 단점이 있다.

 

try {

 

} catch (ex) {

 

}

 

더군다나 모든 라우트에 이를 적용해야 한다면 

중복해서 지저분한 코드를 사용하는 꼴이 된다.

 

신기하게도 라우트에 따라오는 콜백 함수에 try, catch 문을 자동으로 감싸주는 모듈이 있다고 한다.

express-async-errors라는 모듈로, 설치한 뒤에 그냥 불러오기만 하면 끝이다.

https://www.npmjs.com/package/express-async-errors

 

require('express-async-errors');

 

app.use('/', async (req, res) => {

    const result = await getPromise();

});

 

위의 두 번째 인자로 오는 async function을 try, catch로 감싸주는 식으로 작동한다고 한다.

따로 try, catch를 쓰지 않아도 모두에 적용되어 결과적으로 코드가 깔끔해진다.

그러나 어떤 경우에는 작동하지 않을 수 있다고 하니

테스트해서 적합하지 않으면 사용하지 말아야 한다.

 

그럴 때에는 다음과 같은 함수로 대신 감싸줄 수 있다.

 

function asyncMiddleware(handler) {

    return async (req, res) => {

        try {

            await handler(req, res);

        } catch(ex) {

            res.send('에러가 발생했습니다.');

        }

    };

}

 

app.get('/', asyncMiddleware(async (req, res) => {

    const result = await getPromise();

    res.send(result);

}));