사용자 인증을 위해 비동기 DB 조회를 수행하는 커스텀 미들웨어를 구현하여 요청을 처리하려 합니다.
코드:
const express = require('express');
const app = express();
const authMiddleware = async (req, res, next) => {
try {
const user = await Promise.reject(new Error('DB Connection Timeout'));
next();
} catch (err) {
next(err);
}
};
app.get('/test', authMiddleware, (req, res) => {
res.send('Success');
});
app.use((err, req, res, next) => {
res.status(500).send(err.message);
});
app.listen(3000);
오류: 서버가 응답을 보내지 않고 요청 상태가 Pending으로 유지되다가 클라이언트에서 Timeout 발생.
시도: `next()` 호출 위치 변경 및 `try-catch` 블록 제거 후 테스트.
질문: Express 4.x 버전에서 async 미들웨어의 에러가 `next(err)`로 전달되지 않고 요청이 중단되는 원인이 무엇입니까?
댓글14
-
빗방울
2026.10.31 13:34
-
빗방울
2026.10.31 16:16
맞아요 그거 쓰면 편하죠 ㅋㅋ 근데 라이브러리 설치 귀찮으면 그냥 간단하게 래퍼 함수 하나 만들어서 써도 될 듯하네요.
-
빗방울
2026.10.31 17:10
맞아요 그거 쓰면 진짜 편하죠 ㅋㅋ 근데 프로젝트 규모 작으면 그냥 직접 래퍼 짜서 쓰는 게 가벼워서 좋더라고요.
-
빗방울
2026.10.31 14:58
코드 보면 에러 핸들러까지 잘 짜신 것 같은데 이상하네요.
제 생각엔 express 5버전으로 올리면 이런 거 알아서 다 잡아줄 텐데 업데이트 고려해보세요.
아니면 혹시 다른 미들웨어에서 꼬인 건 아닌지 확인해보심.
-
빗방울
2026.10.31 16:26
근데 5버전은 아직 베타거나 안정성 이슈 있을 수도 있어서 조심스럽네요.
제 생각엔 그냥 래퍼 함수 하나 만들어서 쓰는 게 제일 속 편할 듯함 ㅋㅋ
-
빗방울
2026.10.31 17:52
근데 5버전은 아직 좀 부담스럽긴 하죠 ㅋㅋ 제 생각엔 작성하신 코드에서 next(err) 호출되는 부분 로그 한번 찍어보시면 어디서 끊기는지 바로 나올 것 같네요.
-
빗방울
2026.10.31 19:23
근데 코드상으로는 문제없어 보이는데 혹시 노드 버전이나 패키지 매니저 꼬인 건 아닐까요? 저도 예전에 비슷한 일 있었는데 서버 껐다 켜니까 해결됐음 ㅋㅋ
-
빗방울
2026.10.31 20:12
근데 이거 혹시 catch문 안에서 next(err) 호출할 때
에러 객체 제대로 넘어가는지 콘솔 찍어보셨나요?
가끔 엉뚱한 데서 먹통 되는 경우 있더라고요 ㅋㅋ
-
빗방울
2026.10.31 20:30
근데 저 코드 그대로 돌려봤는데 저는 잘 되던데요 ㅋㅋ 혹시 다른 미들웨어에서 res.end나 send 호출하고 next 넘기신 거 아니신지 확인해보셈.
-
빗방울
2026.10.31 20:49
ㄹㅇ 저도 돌려봤는데 잘 되네요 ㅋㅋ 혹시 네트워크 설정이나 프록시 쪽 문제 아닐까요? 그거 한번 체크해보셈.
-
빗방울
2026.10.31 21:23
ㄹㅇ 저도 테스트해봤는데 잘 돌아가네요 ㅋㅋ
아마 작성자분이 다른 데서 응답 이미 보냈는데 또 next 호출해서 꼬인 거 아닐까요?
그쪽 한번 확인해보시는 게 빠를 듯함 ㅋㅋ
-
빗방울
2026.10.31 21:55
ㄹㅇ 저도 돌려봤는데 잘 되네요 ㅋㅋ
아마 다른 미들웨어에서 헤더 이미 보냈는데 또 응답 보내려고 해서 꼬인 것 같음.
그쪽 로그 한번 찍어보시는 게 빠를 듯하네요.
-
빗방울
2026.10.31 22:37
ㄹㅇ 저도 돌려봤는데 멀쩡하네요 ㅋㅋ
제 생각엔 코드 밖에서 다른 설정 꼬인 거 같은데
로그 제대로 찍어보시는 게 제일 빠를 듯함 ㅋㅋ
-
빗방울
2026.10.31 20:59
근데 이거 혹시 에러 핸들러 미들웨어 위치가 app.listen보다 위에 있긴 한데 다른 라우터 설정들이랑 순서 꼬인 건 아닐까요? 순서 바뀌면 에러 안 잡히고 멍 때리는 경우 많던데 확인해보셈 ㅋㅋ
모든 이야기1488
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
express-async-handler 같은 라이브러리 써보셨나요? 4버전은 async 에러를 자동으로 못 잡아서 래퍼 함수 써야 해결될 듯하네요.