• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 터미널 console 2번 출력

터미널 console 2번 출력

  • 이 주제에는 7개 답변, 2명 참여가 있으며 이수인2 년 전에 전에 마지막으로 업데이트했습니다.
8 글 보임 - 1 에서 8 까지 (총 8 중에서)
  • 글쓴이
  • #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 요청을 했습니다. 
    세번째도 동일한 방법으로 했습니다.
    글이 많이 길어졌습니다. 필력이 부족해서 무슨 상황인지 잘 이해 안 가고 무슨 말인지 잘 이해가
    안 갈 것 같다고 생각합니다. 특정 부분이 이해가 안 된다면 다시 작성해보겠습니다. 항상 감사합니다.
     
    #88975

    codingapple
    키 마스터
    ajax쓸거면 form태그는 지웁시다 폼전송 때문에 요청2번가는듯요
    #88992

    이수인
    참가자
    그럼 form에서 한 번 데이터 보내고 ajax로 또 한 번 데이터를 보내는 형식인 건가요?
    
    id : tet
    pw : tet
    결과는 ?null
    타입 결과는 ?object
    if문 통과 함
    id : undefined
    pw : undefined
    결과는 ?null
    타입 결과는 ?object
    if문 통과 함
    
    
    
    에서 왜 id pw가 처음에는 input에 입력한 값이 뜨고 나중에 undefined가 뜨는 건가요?
    
    
    #88993

    이수인
    참가자
     하나 더 여쭈어보고 싶습니다. 첫번째 터미널에서 
    결과는 ?null
    결과는 ?null
    처럼 연속적으로 이상하게 두 번 출력되는 상황은 무엇 때문인가요? 또 어쩔 땐 같은 코드에서 
    암호화 되어 db로 저장될 때도 있는데 server나 컴퓨터의 문제로 인해 생긴 건가요?
    #89020

    codingapple
    키 마스터
    두번째 요청에선 id pw가 잘 전달안되서 undefined뜨는가봅니다  
    결과는 ?null
    결과는 ?null
    는 요청2번가서 두번 출력되는것일 뿐일걸요 
    같은코드에서 암호화는 무슨뜻인지 모르겠군요
    #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을 실행하는 것이라고 생각하고 있습니다.
    혹시 제가 생각했던 것이 맞는 건가요? 아니라면 왜 그런지 알고 싶습니다.
    
    
    
    #89244

    codingapple
    키 마스터
    생각한게 맞습니다 요청은 1회만되게 합시다
    #89377

    이수인
    참가자
    감사합니다. 요청 1회만되게 하니까 원하는 결과가 나오는 것 같습니다.
8 글 보임 - 1 에서 8 까지 (총 8 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠