Backend/Node.js

Node.js - Async Request Handler (비동기 오류 처리)

yxemsy 2022. 2. 26. 13:53

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 되는 에러는 자동으로 오류처리 미들웨어로 전달되도록 구성된다.