SW/오류 해결

[Flask] 화성땅 공동구매 프로젝트 문제점 해결

ahhyeon 2023. 3. 29. 22:14

화성땅 공동구매 프로젝트를 진행하면서 겪었던 문제점을 해결하기 위한 과정을 기록하고자 한다.

 

 

[Flask, MongoDB] 화성땅 공동구매 프로젝트

⭐ 문제분석 "완성작" 부터 보고 나만의 코드 작성하기 1. 기본 세팅 1-1. index.html ✔️ 주문 // body 화성에 땅 사놓기 가격: 평 당 500원 화성에 땅을 사둘 수 있다고? 앞으로 백년 간 오지 않을 기회.

cookie-log.tistory.com

 

문제점

 

위와 같이 POST - MongoDB 실행은 잘 되었으나

 

DB에 저장된 데이터를 긁어오는 GET 과정이 잘 되지 않았다.

추가하고 싶은 데이터가 테이블에 새로 찍혀야 했는데 그대로였다.  

 

원인파악

app.py를 실행시켜 데이터를 추가하면 MongoDB에는 저장이 잘 되는데
index.html 화면에 있는 테이블은 계속 그대로였다.

그래서 난 서버와 클라이언트의 원인을 파악해보기로 했다.

 

먼저 서버를 파악해보자!

터미널창을 확인해보니 http 상태코드가 200번대로 응답하고 있었다.
➡️ 200번대 코드 : 클라이언트의 요청을 서버가 성공적으로 처리했다는 것을 의미!

 

app.py 서버상에는 문제가 없다는 것을 확인하였다. 

고로 클라이언트 코드 index.html의 문제임을 알 수 있었다.

 

 

클라이언트에서 확인하는 방법은
무조건 찍어보는 수밖에 없다!

 

해결1. 

▶ console.log(rows)

// script

$(document).ready(function() {
            show_order();
        });
        function show_order() {

            $.ajax({
                type: 'GET',
                url: '/mars',
                data: {},
                success: function (response) {
                    let rows = response['orders']
                    console.log(rows)

rows가 돌기 전에 데이터가 잘 들어오는지 찍어보았다.

배열로 들어온 걸 확인, 주문한 사람 이름, 주소, 평수가 잘 들어오고 있었다.

➡️ rows에는 문제가 없다!

 

 for문 console.log()

// script

for (i = 0; i< rows.length; i++) {
                        let name = rows[i]['name']
                        let address = rows[i]['address']
                        let size = rows[i]['size']
                        console.log(name)
                        console.log(address)
                        console.log(size)

 

for문을 돌면서 잘못하고 있진 않은지 내가 내고 싶은 데이터가 맞는지 궁금했다.

0번째에도 문제가 있는지 console.log(name), console.log(address), console.log(size)로 찍어보았다.

➡️ 배열을 돌면서 그대로 잘 들어오고 있음을 확인,  tag html은 문제가 없다!

 

해결2.

 append

현재 내 문제는 orderbox에 데이터를 추가할려고 하는데 안붙는 것이기 때문에 

id가 orderbox에 있는 곳을 찾아가 보았다.

<tbody id="order-box">
              <tr>
                <td>강백호</td>
                <td>서울시 마포구</td>
                <td>50평</td>
              </tr>
              <tr>
                <td>서태웅</td>
                <td>부산시 수영구</td>
                <td>30평</td>
              </tr>
              <tr>
                <td>정대만</td>
                <td>서울시 강남구</td>
                <td>40평</td>
              </tr>
            </tbody>

<tbody>에 붙이기 위해서는 붙일 곳의 이름을 정해주어야 한다.

내 코드에는 이게 붙여있지 않았다.

<tbody id="order-box">

➡️ tbody에 order-box 이름을 붙이자! 

 

해결3.

 id 변수값

 

id값에 order-box를 주었음에도 불구하고 그대로였다.

마지막으로 특수문자의 문제인가 싶어 3군데를 바꿔보았다.

// GET 
$('#orderbox').empty()
$('#orderbox').append(temp_html)

// table
<tbody id="orderbox">

➡️ id에 슬래시(-)가 있는 경우 id를 두개로 인식하는 문제가 있음을 확인!

➡️ id에 특수문자를 넣고 싶은 경우, 언더바 슬래시(_)로 쓸 것! 

 

 

이와 같은 조치로 정상적으로 작동이 잘되었음을 확인할 수 있다. 

 

 

요약

1.  html 코드에 orderbox가 어디에 있는지 정해주지 않음
➡️ <tbody id="orderbox">

2. id 변수값의 특수문자를 잘못 지정함
➡️  order-box (❌)
➡️ orderbox & order_box (⭕)