익명의 개발노트

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

코딩일기/에러 일지

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

캡틴.JS 2019. 6. 28. 10:04
반응형
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 sent." means that you're already in the Body or Finished state, but some function tried to set a header or statusCode. When you see this error, try to look for anything that tries to send a header after some of the body has already been written. For example, look for callbacks that are accidentally called twice, or any error that happens after the body is sent.

핵심은  실수로 두 번 호출되는 콜백이나 몸이 전송된 후에 발생하는 오류를 찾아보는 것이다.

 //ID 중복조회
 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'})        
                }
            }                         
        }
    });
 
 //회원가입
 const query = connection.query('insert into users set ?',sql,(err,rows)=>{
      if(err){
          throw err;
      }else{
          res.json({message : '200 OK'})   //프론트로 뿌려줌.
      }
 });

위 코드로 실행하면, ID 중복조회에서 중복된 값이 생기면 에러를 던지면서 서버가 끊긴다.

for문 안에서 요청이 2번 들어가서, 발생한 에러...  

따라서, 코드를 바꿔주었다.

const selectQuery = connection.query('select user_id from users where user_id=?',[user_id],(err,rows)=>{
        if(rows.length == 0){
          const query = connection.query('insert into users set ?',sql,(err,rows)=>{
            if(err){
               throw err;
            }else{
               res.json({message : '200 OK'})   //프론트로 뿌려줌.
            }
         });
     }else{
       res.json({message : '400 Bad Request'}); 
     }
 });    

따라서, 해결. 굿나잇.

 

반응형
Comments