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가 현 블로그 글 내용 + 아래 출처의 영상)
'Web App Project' 카테고리의 다른 글
주식데이터 끌어오기(streamlit) (0) | 2024.01.16 |
---|---|
로그인: get , 로그아웃: post (0) | 2024.01.11 |
HTTP 메서드와 데이터를 전송하는 방식[req.query, req.body 차이] (0) | 2024.01.09 |
작업 중간완료 후 git으로 프로젝트 관리하기[새 브랜치 생성>이동> 커밋] (0) | 2024.01.09 |
node 폴더 경로[ 상대/절대경로 비교]['__dirname'을 꼭 사용하자] (0) | 2024.01.09 |