Express 4로 API 서버 돌리고 있는데요, 라우트 핸들러를 async 함수로 쓰고 그 안에서 await 하는 DB 호출이 reject 되면 프로세스가 통째로 죽습니다. 에러 핸들링 미들웨어(인자 4개짜리)는 분명히 등록해놨는데 거기로 안 들어와요.
동기 코드에서 throw 하면 잘 잡히는데, async 안에서 throw 하거나 await한 promise가 reject되면 unhandledRejection 뜨면서 pm2가 재시작합니다.
app.get('/users/:id', async (req, res) => {
const u = await db.findUser(req.params.id) // 여기서 reject되면
res.json(u)
})
// 에러 미들웨어 (안 탐)
app.use((err, req, res, next) => {
res.status(500).json({ error: err.message })
})매번 try/catch로 감싸서 next(err) 부르면 되긴 하는데 라우트가 수십 개라 다 감싸는 게 너무 지저분합니다. 뭔가 깔끔한 방법이 없을까요?
댓글 0