express-async-handler는 Express.js 애플리케이션에서 비동기 라우트 핸들러의 예외를 쉽게 처리하기 위한 미들웨어이다.
Express는 비동기 함수에서 발생한 예외를 자동으로 캐치하지 않는다. 따라서, 각 비동기 라우트 핸들러에서 try/catch 블록을 사용해야 한다. 이는 코드를 복잡하게 만들고, 에러 핸들링을 쉽게 잊어버릴 수 있다.
express-async-handler는 이 문제를 해결하기 위해 만들어졌다. 이 미들웨어를 사용하면 비동기 라우트 핸들러에서 발생한 예외를 자동으로 캐치하고, 그것을 다음 미들웨어로 전달한다. 이는 Node.js에서 일반적으로 발생하는 "UnhandledPromiseRejectionWarning"을 방지하고, Express 애플리케이션에서 일관된 에러 핸들링을 가능하게 한다.
아래 코드는 express-async-handler의 사용 예시이다:
const express = require('express');
const asyncHandler = require('express-async-handler');
const router = express.Router();
router.get('/', asyncHandler(async (req, res) => {
const data = await someAsyncOperation();
res.json(data);
}));
module.exports = router;
이 예에서 asyncHandler는 비동기 함수를 인수로 받는다. 이 함수에서 발생한 예외는 asyncHandler에 의해 캐치되고, 다음 미들웨어로 전달된다. 따라서, 개별 라우트 핸들러에서 try/catch 블록을 사용할 필요가 없다.