8 글 보임 - 1 에서 8 까지 (총 8 중에서)
-
글쓴이글
-
2023년 6월 30일 19:13 #88972
이수인참가자안녕하세요 nodejs를 수강하고 있는 학생입니다. 다름이 아니라 저번에도 지금 해결 중인 문제때문에 글을 남겼었는데, 우연히 새로운 이상한 것을 발 견했습니다. 그 새로운 이상한 게 사실 별거 아닌 거 같고 저 혼자 끙끙대며 삽질 하는 것 같은데, 진짜 너무 궁금해서 이렇게 글 남깁니다. 현재 회원가입post 요청을 ajax로 하려는데 id와 pw를 입력하고 submit을 하면, error가 발생하고 db에 입력이 안 돼서 과정을 보고싶어서 코드 중간중간 console.log를 입력했습니다. 그런데 똑같은 console이 2번이나 뜨는 것입니다. 이게 일관되게 계속 2번 뜨면 여러방면에서 고민해볼 텐데, 어쩔 땐 1번 출력되고 어쩔 땐 2번 출력돼서 멘붕입니다. 이 글을 올리기 전 총 3번을 실행했습니다. 그럼 코드와 터미널 출력을 올리겟습니다.
app.post('/signUp', function(요청, 응답){ db.collection('loginCounter').findOne( { name : '회원 수' }, function(에러, 결과){ let 총회원수 = 결과.totalmember; db.collection('login').findOne( { id : 요청.body.id, pw : 요청.body.pw }, function(에러, 결과){ console.log("id : " + 요청.body.id) //undefined console.log("pw : " + 요청.body.pw) //undefined console.log("결과는 ?" + 결과) console.log("타입 결과는 ?" + typeof(결과)) if(결과 === null){ console.log("if문 통과 함") bcrypt.hash(요청.body.pw, 8).then(function(암호화된패스워드) { console.log("설마 여기?") db.collection('login').insertOne( { _id : 총회원수 + 1, id : 요청.body.id, pw : 암호화된패스워드 }, function(에러, 결과){ console.log("여기는 통과했을까?") 응답.send("<script>alert('회원가입이 완료되었습니다.');location.href='/';</script>"); db.collection('loginCounter').updateOne( { name : '회원 수'}, { $inc : {totalmember:1}}, function(에러, 결과){ if(에러){return console.log(에러)}; }); }) }) }else{ 응답.send("<script>alert('이미 가입된 정보입니다. 다시 입력해주십시오.');\ location.href='/signUp';</script>"); } }) }) }) server.js입니다.
<div class="container mt-3"> <h4 class = "text-center">Sign Up Page</h4> <form action = "/signUp" method="POST"> <div class="form-group"> <label>ID</label> <input type="text" class="form-control" name="newId" id='id'> </div> <div class="form-group"> <label>PW</label> <input type="text" class="form-control" name="newPw" id ='pw'> </div> <button type="submit" class="btn btn-danger signUp">Submit</button> </form> </div> <script> $('.signUp').click(function(e){ //e.preventDefault() const signId = document.querySelector("#id").value; const signPw = document.querySelector("#pw").value; $.ajax({ url : "/signUp", type : "POST", dataType : "JSON", data : { "id" : signId, "pw" : signPw } }).done(()=>{ $('.afterLogin').addClass('hidden'); }).fail(function(xhr, textStatus, errorThrown){ console.log(xhr, textStatus, errorThrown); }) }) </script> signUp.ejs 파일입니다.
''' te 결과는 ?null 결과는 ?null 타입 결과는 ?object if문 통과 함 undefined undefined 결과는 ?null 타입 결과는 ?object if문 통과 함 '''
첫번째 터미널 출력입니다.
''' id : tet pw : tet 결과는 ?null 타입 결과는 ?object if문 통과 함 id : undefined pw : undefined 결과는 ?null 타입 결과는 ?object if문 통과 함 '''
두번째 터미널 출력입니다.
''' id : undefined pw : undefined 결과는 ?null 타입 결과는 ?object if문 통과 함 '''
세번째 터미널 출력입니다.
(첫번째 실행할 때는 "id : "와 "pw : "를 안 적엇을 때입니다.) 위에 3개 결과처럼 결과가 다 다양하게 나옵니다. 세번 째 때는 id와 pw가 undefined로 나오지만 두번째 때는 input에 입력했던 id와 pw가 뜨다가 undefined로 출력이 됩니다. 일단 제가 생각한 원인은 그냥 "단순 환경 문제다" 입니다. 참고로 현재 '구름ide'를 사용 중입니다. 추가로 이게 또 하나의 원인일지 모르겠지만, 현재 제 코드는 아직 문제가 있어서 회원가입 요청을 하면 500 error가 뜨고 db에 저장이 안 됩니다. 그래서 처음 실행할 때 error가 떴었는데, 그 후 터미널에 ctrl c를 입력하지 않은 채 ctrl s를 해서 다시 서버를 키고 웹 페이지는 (https://coding-apple-eeunu.run.goorm.app/signUp) 에서 signUp 만 지워 home으로 돌아가게 해서 다시 문제가 있는 두번째 회원가입 post 요청을 했습니다. 세번째도 동일한 방법으로 했습니다.
글이 많이 길어졌습니다. 필력이 부족해서 무슨 상황인지 잘 이해 안 가고 무슨 말인지 잘 이해가 안 갈 것 같다고 생각합니다. 특정 부분이 이해가 안 된다면 다시 작성해보겠습니다. 항상 감사합니다.
2023년 6월 30일 22:35 #88992
이수인참가자그럼 form에서 한 번 데이터 보내고 ajax로 또 한 번 데이터를 보내는 형식인 건가요? id : tet pw : tet 결과는 ?null 타입 결과는 ?object if문 통과 함 id : undefined pw : undefined 결과는 ?null 타입 결과는 ?object if문 통과 함 에서 왜 id pw가 처음에는 input에 입력한 값이 뜨고 나중에 undefined가 뜨는 건가요?
2023년 6월 30일 22:53 #88993
이수인참가자하나 더 여쭈어보고 싶습니다. 첫번째 터미널에서 결과는 ?null 결과는 ?null 처럼 연속적으로 이상하게 두 번 출력되는 상황은 무엇 때문인가요? 또 어쩔 땐 같은 코드에서 암호화 되어 db로 저장될 때도 있는데 server나 컴퓨터의 문제로 인해 생긴 건가요?
2023년 7월 1일 09:41 #89020
codingapple키 마스터두번째 요청에선 id pw가 잘 전달안되서 undefined뜨는가봅니다 결과는 ?null 결과는 ?null 는 요청2번가서 두번 출력되는것일 뿐일걸요 같은코드에서 암호화는 무슨뜻인지 모르겠군요
2023년 7월 2일 22:23 #89207
이수인참가자input에서 값을 입력하면, server에서 비밀번호를 암호화하여 db에 저장하는 코드를 작성해봤습니다. 그런데 현재 제 코드를 실행하면 bcrypt.hash(요청.body.pw, 8).then(function(암호화된패스워드) { 부분에서 막히고 error가 뜹니다. 요청.body.pw의 값을 확인해보니까 null이어서 error가 뜨는 것으로 확인됩니다. 당연히 대부분 요청.body.pw가 null이어서 error가 뜨고 db에는 당연히 저장이 안 됩니다. 그런데 어쩔 때 제가 input에서 입력한 값이 id : test, pw : test라고 한다면, error가 뜨긴하는데 db에 제가 입력한 값이 저장이 되는 겁니다. 그것도 비밀번호는 암호화가 되는 형태로요. 위 코드에서 막힌다면 당연히 function도 실행이 안 되어야 할 텐데 실행되는 경우가 있습니다. 이런 경우가 항상 일어나는 건 아니고 어떤 경우에서 일어나서 예측은 안 됩니다.
단순히 제 생각이지만, id : tet pw : tet 결과는 ?null 타입 결과는 ?object if문 통과 함 id : undefined pw : undefined 결과는 ?null 타입 결과는 ?object if문 통과 함 처럼 2번 요청된 값 중에 undefined로 넘어오는 게 있고 input에서 입력했던 값이 넘어오는 것이 있지않습니까? 그 중에서 input에서 넘어온 값이 막혔었던 코드를 우연히 통과하여 정상적으로 function을 실행하는 것이라고 생각하고 있습니다. 혹시 제가 생각했던 것이 맞는 건가요? 아니라면 왜 그런지 알고 싶습니다.
-
글쓴이글
8 글 보임 - 1 에서 8 까지 (총 8 중에서)
- 답변은 로그인 후 가능합니다.