Web App Project
어떤 조건에서든 res.send() 함수를 중복하여 호출하면 안된다
하얀성
2024. 1. 10. 14:17
connection.query(sql, values,function(err, result){
if(err) throw err;
if(result.length == 0){
res.send("<script>alert('존재하지 않는 아이디입니다.'); location.href='/login';</script>")
}
res.send(result);
})
//이렇게는 왜 안되지?
어떤 조건에서든 res.send() 함수를 중복하여 호출하면 안된다는 것입니다. res.send() 함수는 한 HTTP 요청에 대해서 한 번만 응답을 보내야 합니다.
여러분의 코드에서는 result.length가 0이 아닐 경우 (else 부분이 생략되어 있음), 두 번째 res.send(result);가 실행되어, 이미 응답을 보냈음에도 불구하고 또 다시 응답을 시도합니다. 이것은 Express에서 허용되지 않으며, 이로 인해 서버 오류가 발생할 수 있습니다.
즉, 특정 조건에서 send가 두번 보내진다. 이때는 Express가 허용하지 않아 서버오류가 발생한다.
바른 코드
connection.query(sql, values,function(err, result){
if(err) throw err;
if(result.length == 0){
res.send("<script>alert('존재하지 않는 아이디입니다.'); location.href='/login';</script>")
}else{
res.send(result);
}
})
})
코드 해설
connection.query(sql, values, function(err, result) {
if(err) throw err;
if(result.length == 0) {
// 존재하지 않는 아이디인 경우, 클라이언트에게 알림을 보내고 리다이렉트
res.send("<script>alert('존재하지 않는 아이디입니다.'); location.href='/login';</script>");
} else {
// 결과가 있을 경우, 결과를 클라이언트에게 보냄
res.send(result);
}
// 'res.send()' 함수는 if 또는 else 블록 내에서만 한 번 호출되어야 합니다.
});
(git branch web-2 와 web-3이 바뀌었으니 체크바람. web-3이 과거내용. web-2가 현 블로그 글 내용 + 아래 출처의 영상)