1) request handler
흔히 promise()를 사용한 catch(next)와 async function의 try ~ catch, next를 사용하여 오류를 처리해왔다.
근데 이들 구문을 작성하는 것은 귀찮고 실수하기 쉽다.
async request handler는 request handler를 async function으로 작성하면서
try~catch, next를 자동으로 할 수 있도록 구성한 아이디어다.
아래 코드에서 asyncHandler는 requestHandler를 매개변수로 갖는 함수형 미들웨어다.
const asyncHandler = (requestHandler) => {
return async (req, res, next) => {
try {
await requestHandler(req, res)
} catch (err) {
next(err)
}
}
}
--- routes ---
router.get('/', asyncHandler(async (req, res) => {
const posts = await Posts.find({})
if (posts.length < 1) {
throw new Error('Not Found')
}
res.render('posts/list', { posts })
})
전달된 requestHandler는 try~ catch로 감싸져 asyncHandler 내에서 실행되고,
throw 되는 에러는 자동으로 오류처리 미들웨어로 전달되도록 구성된다.
'Backend > Node.js' 카테고리의 다른 글
Node.js - JWT 기본 (0) | 2022.03.07 |
---|---|
(정리) 3계층 구조로 백엔드 회원가입 Rest API 구현 (0) | 2022.03.07 |
Node.js - Express.js와 MongoDB로 웹서비스 만들기 (0) | 2022.02.26 |
Node.js - Express.js와 REST API (2) (0) | 2022.02.20 |
Node.js - Express.js와 REST API (1) (0) | 2022.02.20 |