Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 프로그래머스
- TypeScript
- CORS
- JWT
- Node.js
- mongoose
- nginx
- 항해99
- mongodb
- Load Balancer
- java
- MYSQL
- elb
- AWS
- Joi
- 타입스크립트
- 생활코딩
- Nodejs
- 메소드
- it
- JavaScript
- npm
- ubuntu
- reduce
- nomadcoder
- https
- wil
- 자바스크립트
- 노마드코더
- 조건문
Archives
- Today
- Total
V-logue
[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client 본문
Error
[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
보그 2022. 6. 27. 16:00Node로 코드를 짜다보면 은근히 흔하게 볼 수 있는 에러의 종류인데,
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
에러가 뜨는 원인이 내가 찾은 해답을 제외하고도 또 있을 수 있겠지만,
아마도... 주로... 구글로 찾아보니..
서버가 클라이언트에게 둘 이상의 응답을 보내려고 할 때 뜨는 에러일 확률이 상당히 높다.
router.get('/auth', authMiddleware, async(req, res) => {
try {
const user = res.locals.user
if(user === undefined) {
res.status(401).json({ errorMessage: "로그인이 필요합니다."})
}
const existUser = await User.find();
res.status(200).json( existUser )
} catch(err) {
if(err){
console.log(err)
res.status(400).json({ errorMessage: "유저 정보를 찾을 수 없습니다."})
}
}
})
만약 위와 같은 코드가 있다고 한다면, 저 상태로 node를 실행시키고
포스트맨으로 get요청을 받는다면
[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
에러가 나타날 것이다.
위에서 둘 이상의 응답을 보내려고 할 때라고 설명했는데,
if(user === undefined) {
res.status(401).json({ errorMessage: "로그인이 필요합니다."})
}
const existUser = await User.find();
res.status(200).json( existUser )
// 바로 이부분이 문제다. if문 다음에 내보내려는 응답이 res.status(401)에서 끝나지 않고
// 다음의 res.status(200)까지 이어져 응답을 두개를 연이어 보내려고 하는 모습이다.
// 위와 같은 코드를 아래와 같이 고치면 문제는 해결된다.
if(user === undefined) {
res.status(401).json({ errorMessage: "로그인이 필요합니다."})
} else {
const existUser = await User.find();
res.status(200).json( existUser )
}
// if문 다음에 else로 새로운 응답값을 내보낼 수 있게 만들어주면 된다.
위 코드박스에서 설명한 것처럼 하면 된다.
두개의 응답이 연이어서 나가려고 할 때 발생하는 것이기 때문에 응답값을 어떤 처리를 해줘서
별개의 응답으로 내보내면 된다.
'Error' 카테고리의 다른 글
Comments