coding/Error

ERR_HTTP_HEADERS_SENT

JIN_Coder 2022. 8. 31. 02:48

ERR_HTTP_HEADERS_SENT

오류는 서버가 클라이언트에게 둘 이상의 응답을 보내려고 할 때 발생하는 오류

[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

예시 이미지

 

처음에 이런 에러를 보았을 땐 매우 당황했다. 처음 보는 에러였고, 정확히 어디서 문제가 있는지 알 수가 없어 에러를 천천히 보고 구글링을 했다.

 

클라의 요청에 내(서버)가 둘 이상의 응답을 보내면 나타나는 오류라고 한다.

 

음... 난 분명히 응답을 하나만 했을 텐데.. 왜냐하면 res.status().json({})으로 응답을 보내줄 때 항상 return문을 붙여주니까 2개 이상이 가지 않을 것이라 생각했다.

 

문제는 내 미들웨어에 있었다. 로그인 유무를 확인하는 미들웨어를 만들어서 api통신을 하기 전에 미들웨어에서 토큰 값을 기반으로 로그인 유무를 확인했는데 그때 한번 응답을 하고, api통신에서 또 응답을 보내준 것 같다.

미들웨어의 return 하나가 잘못된 위치에 있었다.

그 부분만 수정해주니 다시 정상적으로 작동했다.

 

이와 관련해서 여러 블로그들을 보았는데

1. 응답 과정에서 return을 제대로 하지 않은 경우

// 예시
if (!req.body.name) {
  return res.status(400).json({
    status: 'error',
    error: 'req body cannot be empty',
  });
}

 

2. 여러 개의 if문 사용 시 else를 제대로 사용하지 않았을 경우

// 예시
app.post('/login', async (req, res) => {
    /* 변수 선언 등등*/
    
    if{
    	/* 변수 처리문 */
    
    	return res.status(201).json({
        	/* 응답 메시지 */
        });
    }
    return res.status(201).json({
    	/* 응답 메시지 */
    });
});

3. 반복문을 돌면서 응답을 할 경우

const selectQuery = connection.query('select user_id from users',(err,rows)=>{
        if(err){
            throw err;
        }else{
           //결과값을 배열로 가져오기때문에 체크해줘야함
           for(let i=0; i<rows.length;i++){
               if(user_id === rows[i].user_id){
                   res.json({message : '400 Bad Request'})        
                }
            }                         
        }
    });

등 말 그대로 응답을 여러 번 할 경우 생기는 에러다.

해결은 간단하게 return을 잘 찍어주거나,
if문 사용 시 else 사용,

반복문 안에서 응답하지 않기 등

 

해결은 간단하게 1번의 요청에는 1번만 응답해주기

 

 

 

 

[Node.js] "UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

🚀 Node.js로 개발 시 한번씩 겪어봤을 에러입니다. "UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client" [ERR_HTTP_HEADERS_SENT]오류..

cocoon1787.tistory.com

 

[해결] node 회원가입 api 구현간 발생한 에러

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client at ServerResponse.setHeader (_http_outgoing.js:470:11) The error "Error: Can't set headers after they are..

avengersrhydon1121.tistory.com

 

[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client 오류

NodeJS 개발자로서 다음과 같은 런타임 오류가 발생할 가능성이 있습니다.\[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client오류 ERR_HTTP_HEADERS_SENT는 서버가

velog.io

 

'coding > Error' 카테고리의 다른 글

multer, S3 - this.client.send is not a function  (0) 2022.09.11
npm - "minor" / "23 packages are looking for funding" 에러  (0) 2022.09.08
인스턴스 접속 에러  (0) 2022.08.19
외래키 설정  (0) 2022.08.14
함수의 {return }  (0) 2022.08.04