클라이언트의 요청을 처리해주지 못하거나 예외적인 상황이 발생해 서버가 죽는 경우가 생길 수 있다.
사람들이 안 쓰는 앱이야 상관 없지만 인스타와 같은 앱의 서버가 멈춘다면 막대한 손해가 발생한다.
이를 막기 위해서 쉽게 떠올릴 수 있는 게 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);
}));
'Node.js > NPM' 카테고리의 다른 글
JSON Web Token이란? 노드에서의 사용 예제 (0) | 2020.07.06 |
---|---|
bcrypt의 작동원리와 노드에서 사용하는 방법 (1) | 2020.07.06 |
회원 가입시 복잡한 패스워드만 등록 가능하게 해주는 노드 모듈 - joi (0) | 2020.07.06 |
npm 유용한 명령어들 (0) | 2020.07.03 |
사용자가 입력한 값의 유효성을 판단해주는 노드 모듈 - hapi/joi (0) | 2020.06.22 |