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

home2 게시판 Node.js, Express 게시판 Get 요청에 대한 함수가 끝나고 다른 곳으로 Redirection 됩니다.

Get 요청에 대한 함수가 끝나고 다른 곳으로 Redirection 됩니다.

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

    칼있으마
    참가자
    안녕하십니까? 선생님
    
    항상 감사한 마음으로 강의를 듣고 있는 수강생입니다^^;;
    Ajax를 이용해서 Get 요청시 랜더링 요청한 곳으로 가지 않고 다른 곳으로 리다이랙션 됩니다. 
    
    무언가 제가 잘못 구성하여 그런것 같은데 혹시 이유를 알 수 있을 까요?
    
    
    
    
    해당 소스는 아래와 같습니다. 
    
    List.ejs
    중략... 
          <div class="container">
            <!-- aria-current="true" -->
            <div class="list-group">
              <% for (let i = 0 ; i < people.length ; i++) { %>
              " class="list-group-item list-group-item-action">
                <P>글번호 : <%= people[i]._id %> </P>
                <h4>이름 : <%= people[i].name %> </h4>
                <P>기관 : <%= people[i].institution %> </P>
                <P>평가 횟수 : <%= people[i].counter %> </P>
                <button class="btn btn-info put" data-id="<%= people[i]._id %>">평가내용</button>
                <button class="btn btn-danger delete" data-id="<%= people[i]._id %>">삭제</button>
                <!-- <button class="btn btn-danger chat" data-id="<%= people[i]._id %>" data-id-user="<%= people[i].작성자 %>">채팅하기</button> -->
              
              <% } %>
            </div>
          </div>
    
        ... 중략 ... 
    
              $('.put').click(function(e){
                var 임시글번호 = e.target.dataset.id; 
                var 임시유알엘 = '/chart/' + 임시글번호;
              
    
                $.ajax({
                  method : 'GET',
                  url : 임시유알엘,
                  data : {_id : 임시글번호 },
                }).done(function(결과){
                  // 페이지를 강제로 새로고침해주세요 
                  //alert('수정 페이지를 잘띄웠다고 서버에서 응답이 왔어요');
                }).fail(function(xhr, textStatus, errorThrown){
                  console.log(xhr, textStatus, errorThrown);
                });
              });
    
    
    위의 소스에서와 같이 List.ejs에서 [평가 내용]을 누르면 Ajax를 이용해서 Get 요청을 합니다. 
    (사실 버튼을 여러개를 두고싶은데 Form에 Action을 여러개 설정하는 방법을 모릅니다 ㅠ)
    (저 경우 [리스트 클릭]과, [평가내용], [삭제]를 사용하고 있습니다만. 다른 방식으로는 Action을 추가하지 못해서 Ajax로... ㅠㅠ)
    
    
    
    그렇게 평가 내용을 누르면 Server.js 에서는 다음과 같이 처리합니다. ...
    (정상 적인 console.log를 굵고 기울게 표현하였습니다)
    app.get('/chart/:id', function(요청, 응답) { 
        var id = parseInt(요청.params.id);
        console.log('챠트/:id로 들어왔음-original');
    
        // DB의 data를 가져와서 해당 항목1,2,3,4,5와, 데이터1에 실제 값을 입력할것
        Evaluate_Answer.find({people_id : id}).toArray(function(에러, 피플파인드결과){
            if (에러) 
                return 응답.status(400).send({message : '실패했습니다.'});       // 2XX : 요청 성공, 4XX : 잘못된 요청으로 실패, 5XX : 서버의 문제  
            
            if (!피플파인드결과)
            {
                console.log('피플파인드결과가 없습니다');
                return 응답.send("<script>alert('피플 파인드 결과가 없습니다.'); location.href = document.referrer; </script>");
            }
            console.log('챠트/:id로 들어왔음-피플파인드 성공');
            var 평가합계 = [
                {$match : { people_id : id}}, 
                {$group : { _id : id,
                            "name": { "$first": "$people_name" },
                            TOT_SL_WSL : { $sum : '$SL_WSL'}, 
                            TOT_SL_DBPL: { $sum : '$SL_DBPL'},
                            TOT_SL_WDPL: { $sum : '$SL_WDPL'},
                            TOT_SL_PRPL: { $sum : '$SL_PRPL'},
                            TOT_SL_DNL : { $sum : '$SL_DNL'},
                            TOT_CR_AAP : { $sum : '$CR_AAP'},
                            TOT_CR_DPC : { $sum : '$CR_DPC'},
                            TOT_CR_DVC : { $sum : '$CR_DVC'},
                            TOT_CR_RPD : { $sum : '$CR_RPD'},
                            TOT_SC_ECM : { $sum : '$SC_ECM'},
                            TOT_SC_MDR : { $sum : '$SC_MDR'},
                            TOT_SC_TMM : { $sum : '$SC_TMM'},
                            TOT_SC_HLM : { $sum : '$SC_HLM'},
                            TOT_PF_CSA : { $sum : '$PF_CSA'},
                            TOT_PF_OBJ : { $sum : '$PF_OBJ'},
                            TOT_PF_RTN : { $sum : '$PF_RTN'},
                            TOT_PF_UDS : { $sum : '$PF_UDS'},
                            TOT_PF_DCM : { $sum : '$PF_DCM'},
                            TOT_PF_CRT : { $sum : '$PF_CRT'},
                            TOT_PF_LDS : { $sum : '$PF_LDS'},
                            TOT_RS_RPA : { $sum : '$RS_RPA'},
                            TOT_RS_RFP : { $sum : '$RS_RFP'},
                            TOT_RS_RCR : { $sum : '$RS_RCR'},
                            TOT_RS_RAP : { $sum : '$RS_RAP'}
                          }}
            ];
            Evaluate_Answer.aggregate(평가합계).toArray(function (에러1, 결과) {
                if (에러1) {
                    return 응답.status(400).send({message : '실패했습니다.'});       // 2XX : 요청 성공, 4XX : 잘못된 요청으로 실패, 5XX : 서버의 문제  
                }
                    
                let SumObj = 결과[0];
                console.log('결과.name : ', SumObj.name);
                // 항목을 자동으로 구분해 내는 로직이 필요하다!!!! - 지금은 하드코딩으로 .....
                let SL = (SumObj.SL_DBPL + SumObj.SL_DNL + SumObj.SL_PRPL + SumObj.SL_WSL + SumObj.SL_WDPL) / 5;
                let CR = (SumObj.CR_AAP + SumObj.CR_DPC + SumObj.CR_DVC + SumObj.CR_RPD) / 4;
                let SC = (SumObj.SC_ECM + SumObj.SC_HLM + SumObj.SC_MDR + SumObj.SC_TMM) / 4;
                let PF = (SumObj.PF_CRT + SumObj.PF_CSA + SumObj.PF_DCM + SumObj.PF_LDS + SumObj.PF_OBJ + SumObj.PF_RTN + SumObj.PF_UDS) / 7;
                let RS = (SumObj.RS_RAP + SumObj.RS_RCR + SumObj.RS_RFP + SumObj.RS_RPA) / 4;
                console.log('챠트/:id로 들어왔음-데이터 합산 성공');
                const data = {
                    labels: ['SL', 'CR', 'SC', 'PF', 'RS'],
                    datasets: [
                        {
                        label: SumObj.name,
                        data: [SL, CR, SC, PF, RS],
                        backgroundColor: 'rgba(255, 99, 132, 0.2)',
                        borderColor: 'rgba(255, 99, 132, 1)',
                        borderWidth: 1,
                        },
                        // 추가 데이터셋을 필요에 따라 설정할 수 있습니다.
                    ],
                };
    
                console.log('챠트/:id로 들어왔음-챠트 데이터 만들기 성공!');
    
                응답.render('chart.ejs', { data });    
            });       
        });
    });
     
    마지막에 저렇게 chart.ejs를 data와 함께  랜더링 하도록 했는데 
    자꾸만 edit/:id를 Get 요청 하는 곳으로 진입을 합니다. 
    
    참고로 edit/:id를 Get 했을 때의 내용은 아래과 같습니다. (정상 적인 console.log를 굵고 기울게 표현하였습니다)
    app.get('/edit/:id', function(요청, 응답) { 
        var id = parseInt(요청.params.id);
        console.log('edit/:id로 들어왔음 - original');
        Evaluate_People.findOne({_id : id}, function(에러, 피플결과){
            if (에러) 
                return 응답.status(400).send({message : '실패했습니다.'});       // 2XX : 요청 성공, 4XX : 잘못된 요청으로 실패, 5XX : 서버의 문제  
            
            if (!피플결과)
            {
                console.log('피플결과가 없습니다');
                return 응답.status(400).send({message : '피플결과가 없습니다.'});
            }
            var Result = {People : 피플결과};
            console.log('edit/:id로 들어왔음 - 피플검색완료');
    
            Evaluate_Multiple_Choice.find().toArray(function(에러, 객관식결과){
                if (!객관식결과)
                {
                    console.log('객관식 결과가 없습니다');
        
                    응답.render('edit.ejs', {data : Result});
                }
                Result = { ...Result, MC: 객관식결과 };
                console.log('edit/:id로 들어왔음 - 객관식검색완료');
                Evaluate_Multiple_Choice_Detail.find().toArray(function(에러, 객관식디테일결과){
                    if (!객관식디테일결과)
                    {
                        console.log('객관식 결과가 없습니다');
            
                        // 일단 객관식의 결과만 표시할것 
                        응답.render('edit.ejs', {data : Result});
                    }
        
                    Result = { ...Result, MCD: 객관식디테일결과 };
                    console.log('edit/:id로 들어왔음 - 객관식디테일검색완료');
        
                    Evaluate_SubjectiveExpression.find().toArray(function(에러, 주관식결과){
                        if (!주관식결과)
                        {
                            console.log('주관식 결과가 없습니다');
                
                            // 일단 객관식 디테일의 결과만 표시할것 
                            응답.render('edit.ejs', {data : Result});
                        }
            
                        Result = { ...Result, SE: 주관식결과 };
            
                        console.log('edit/:id로 들어왔음 - 주관식 검색완료');
                        응답.render('edit.ejs', {data : Result});
                    });                
                });
            });
        });
    });
     
     
     
     
     
     
     
     
     
     
    그리고 최종적으로 [평가 내용]을 클릭했을 때 다음과 같이 Console.Log가 찍힙니다. 
    
    챠트/:id로 들어왔음-original
    edit/:id로 들어왔음 - original
    챠트/:id로 들어왔음-피플파인드 성공
    결과.name :  홍길동
    챠트/:id로 들어왔음-데이터 합산 성공        
    챠트/:id로 들어왔음-챠트 데이터 만들기 성공!
    edit/:id로 들어왔음 - 피플검색완료
    edit/:id로 들어왔음 - 객관식검색완료
    edit/:id로 들어왔음 - 객관식디테일검색완료
    edit/:id로 들어왔음 - 주관식 검색완료
    
     
     
    (마지막에 랜더링 지시한 내용은 듣지도 않고...)
    왜 저렇게 왔다 갔다 하는 것일까요?
     
    #97061

    codingapple
    키 마스터
    ajax요청시 응답.render는 이용불가능합니다 
    ajax성공시 window.location.href = "/페이지" 코드 실행합시다
    #97066

    칼있으마
    참가자
    그럼 Ajax 성공시에는 data를 어떻게 넘길 수 있을까여?
    
    응답.render('chart.ejs', {data});
    
    저렇게 Data를 넘기고 싶을때는 어떻게 하면 좋을까요?
     
    데이터를 받아야만 표현이 되는 페이지인데 ^^;;;;;;
    
    
    #97089

    codingapple
    키 마스터
    그럼 ajax 요청말고 일반 get요청 쓰는게 나을듯요
4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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