본문 바로가기
Q&A해결2026년 7월 12일2분 읽기

Express에서 async 라우트 안에서 에러 던지면 서버가 그냥 죽어버립니다

e
express_dohyun
조회 914댓글 2

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

아직 댓글이 없습니다.
Ctrl+Enter로 등록