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

home2 게시판 Node.js, Express 게시판 조건에 따른 redirect 시 무반응

조건에 따른 redirect 시 무반응

10 글 보임 - 1 에서 10 까지 (총 10 중에서)
  • 글쓴이
  • #54134

    xaxa
    참가자
    ajax로 보낸 데이터에 따라 각각 다른 페이지로 redirect 하고자 합니다.
    
    아래와 같이 코드를 작성했을 때 발생하는 문제점과 상황입니다.
    - ajax로 넘긴 ANumber를 server의 console에 출력 시 잘 출력 됨
    - server.js에서 if문 없이 infoA1이나 infoA2만 사용하여 redirect했을 때 문제 없음
      > ANumber 값에 따라 다른 페이지로 redirect하기 위해 if문 사용
    - server.js에서 if문 사용 시 if문 내부의 console은 잘 출력 되지만 redirect는 안됨
    
    if문 없이 redirect하면 문제가 없고,  if문을 사용하더라도
    if문 내부의 console이 출력되는 것으로 보아 data는 잘 받아오나,
    redirect가 안되는 이유를 모르겠습니다....
    
    
    <<server.js>>--------------------------------------------------------------
    app.post('/A', function(req, res) {
      console.log("ANumber : " + req.body.ANumber)
      //res.redirect('/infoA1');
      //res.redirect('/infoA2');
      if(req.body.ANumber == "A1"){
        res.redirect('/infoA1');
        console.log("req.body.ANumber is A1")
      }
      else if(req.body.ANumber == "A2"){
        res.redirect('/infoA2');
        console.log("req.body.ANumber is A2")
      }
    })
    -----------------------------------------------------------------------------
    <<A.ejs>>-----------------------------------------------------------------
        <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
        <form action="/A" method="POST">
          <button class="btn btn-primary" id="num1" type="submit">num1</button>
          <button class="btn btn-primary" id="num2" type="submit">num2</button>
        </form>
        <script>
          $('#num1').click(function() {   
            $.ajax({ 
              method : 'POST',
              url : '/A',
              data : {ANumber:"A1"}
            })
          })
          $('#num2').click(function() {   
            $.ajax({  
              method : 'POST',
              url : '/A',
              data : {ANumber:"A2"}
            })
          })
        </script>
    -----------------------------------------------------------------------------
    
    if문을 사용하고 A1을 클릭한 경우,..
    console 출력 - server>>
    ANumber : A1
    req.body.ANumber is A1 => 이 부분이 출력된다면 redirect가 되어야 하는데 안됩니다.
    ANumber : undefined => 이 부분이 왜 출력되는지는 모르겠습니다..
    
    console 출력 - browser>>
    
    A:111과 A:105는 /A로 get요청 시 server에서 render한 값을 콘솔에 출력하는 부분으로
    예시를 든다면 아래와 같습니다.
    ex)  {에이1:data} 형태로 server에서 render했을 때, 
         let A1 = "<%= 에이1 %>";
         console.log("에이1 is >>> " + A1) // 이 부분 입니다.
    #54153

    xaxa
    참가자
    +)
    /A의 post에서
    - res.redirect('/branchinfoA1');이나 res.redirect('/branchinfoA2');만 사용하면 잘됨
    - if문에 넣으면 위와 같은 오류 발생
      if(req.body.macNumber == "A1"){
         res.redirect('/branchinfoA1');
         console.log("req.body.macNumber is A1")
      }
    
    혹시나 해서 if문에 A1만 넣고 실행해보았는데 위와 똑같은 오류가 발생하네요 ㅠㅠ
    res.redirect('/branchinfoA1');하면 잘 되면서 if문에 넣으면 안되는 이유가 있나요..?..
    (ajax로 data를 받아오는 것처럼 server.js가 아닌 외부에서 조건을 가져오는 경우가 아닌 server.js 자체에서 조건 생성해서 if문 사용으로 redirect하는 것은 잘 됩니다!)
    #54182

    codingapple
    키 마스터
    ajax 사용시 서버에서 .redirect말고 프론트엔드에서 window.location.href="/" 실행해서 페이지이동시키면 됩니다
    #54187

    xaxa
    참가자
    제한된 localhost 말고 헤로쿠로 배포해서 링크를 통해 데스크탑 브라우저 및 모바일 브라우저(사파리 등)에서도 접속해보고자 하는데, 이때 window.과 관련된 것을 사용해도 모바일 브라우저 쪽에서 문제가 없을까요? 
    window.location.href를 찾아보니 웹브라우저에서 페이지 이동.. 이라는 말이 많아서 질문드립니다!
    
    만약 문제가 된다면 다른 방안이 있을까요?
    #54210

    xaxa
    참가자
    +) 일단 뭐든 해보고자 해서 아래와 같이 2가지 방법으로 코드를 넣어봤는데 페이지가 안 넘어가서 브라우저의 로딩부분이 계속 돌아갑니다..
    (1번 사용할 때는 2번 삭제, 2번 사용할 때는 1번 삭제하여 테스트 하였습니다)
    <<A.ejs>>
        <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
        <form action="/A" method="POST">
          <button class="btn btn-primary" id="num1" type="submit"
                      onclick="location.href='infoA1.ejs';">num1</button>  //1-1)
          <button class="btn btn-primary" id="num2" type="submit" 
                      onclick="location.href='/infoA2'">num2</button>     //1-2) 
        </form>
        <script>
          $('#num1').click(function() {   
            window.location.href='/infoA1';         //2)
          })
          $('#num2').click(function() {   
            window.location.href='/infoA2';
          })
        </script>
    
    +) Button 요소의 type이 form 때문에 submit이라면 onClick을 사용할 수 없나요?
    
    로 수정하니 페이지 이동은 되긴 합니다..ㅠㅠ
    #54248

    codingapple
    키 마스터
    폼태그로 post요청하는거면 ajax가아니라서 그냥 서버에서 .redirect() 해주면 됩니다
    #54256

    xaxa
    참가자
    num1, num2 버튼은 form으로 post요청(서버에서 db를 사용해 infoA1과 A2에 방문해도 되는지 여부 판단)도 해야 하고 infoA1, infoA2로 페이지 이동(버튼에 따라 다른 페이지 이동)도 해야 하는 상황입니다!
    처음에 ajax로 눌린 버튼의 번호(ANumber)를 서버로 보내서 if문으로 본글의 맨 처음 질문과 같이 사용하려고 했으나 오류가 났습니다.
    그래서 버튼 요소에 onClick을 사용해보고자 했지만 폼태그로 post요청이라 type이 submit이라서 이도 안되는거 같네요...
    폼으로 post요청도 하고 눌린 버튼에 따라 각자 다른 페이지로 이동해야 할 경우에 다른 방법이 있을까요?
    아무리 생각해도 위에 두 방법 밖에는 생각이 안나요 ㅠㅠ 버튼을 따로 만들어야 할까요
    #54325

    codingapple
    키 마스터
    버튼마다 각각 다른 <form>태그로 싸매거나 그러면 다른 경로로 이동시킬 수 있으니까 더 간단할듯요
    #54366

    xaxa
    참가자
    - 버튼1 클릭 : /A로 post요청(db에서 ~~를 찾는 코드) + infoA1으로 페이지 이동
    - 버튼2 클릭 : /A로 post요청(db에서 ~~를 찾는 코드) + infoA2로 페이지 이동
    - 버튼1과 버튼2의 post요청 부분이 'db에서 ~~를 찾는 기능'으로 동일하여 둘 다 /A로 post요청 하도록 함
    
    조언해주신 것처럼 버튼마다 각각 다른 form 태그로 감싸기 위해 /A를 /A1과 /A2로 복제하여
    /A1으로 post요청하는 form 태그에 버튼1을 넣고, /A2로 post요청하는 form 태그에 버튼2를 넣으면 해결될 것이지만,
    /A의 'db에서 ~~를 찾는 기능'을 /A1과 /A2로 복제하면 길고 동일한 코드가 2개로 들어가는데 더 간단한 방법이 있을까요?
    
    #54416

    codingapple
    키 마스터
    두 버튼 다 같은경로인데 뒤에 url query string, url parameter 이런거 다르게 바꾸거나 하면 될듯요
10 글 보임 - 1 에서 10 까지 (총 10 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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