내가 만든 CRUD ~ 오류 위해 만들었지~

개발자가 되고 싶어요·2023년 2월 16일
0
post-thumbnail

CRUD의 Create에서 다 무난하게 추가했는데 한가지 계속 추가가 안됐다. 오류도 아니고 아예 정보가 넘어오지가 않았다.

일단 그냥 사람 추가하는 초간단 crud이고

들어가는 정보는 이렇게 있다.

일단 저 위에 데이터들은 우선 추가해주는 js파일로 추가해준 요소들이라 큰 문제 없이 모든 정보들이 입력 됐지만 ejs 파일로 POST 요청 값들을 보내려 하는 부분에서 문제가 생겼다.

문제는 입력한 데이터 6가지 중 "type"과 "alive_or_dead" 2 가지의 데이터가 전달되지 않았다.


이렇게 다 입력해도

?? 👴🏻
?? 👴🏻

근데 난 스키마 설정에서 유효성검사에 required: true 설정을 해놓은 상태였다.

그래서 왜 데이터가 안들어 왔는데 오류가 안났지 하면서 required: true 설정을 안했나 확인해보았지만

const peopleSchema = new mongoose.Schema({
    Name: {
        type:String, 
        required: true
    },
    Born: {
        type:Number,
        required: true
    },
    Nationality: {
        type: String,
        required: true
    },
    type: {
        type: String,
        require: true
    },
    Achievements: {
        type: String,
        require: true
    },
    alive_or_dead: {
        type: String,
        enum: ['dead', 'alive'],
        require: true
    }
});

호호 어이업서

중간정리 해보자면 지금까지 발생한 에러는 두 가지.

  1. 데이터가 전달되지 않았다는 것
  2. 유효성 검사 설정에서 필수 입력 설정을 했음에도 공백의 데이터에 오류가 발생하지 않은 것

1번 에러? ㅋㅋ
진지하게 1시간동안 찾았다. 일단 enum이랑 뭐 mongoose 입력을 잘못했나 계속 고쳐보고 자리 바꿔보고 했는데도 안됐다. 그러다가 갑자기 '설마 스펠링? 에잉 ~~ 설마'

ㅋㅋ ㅎㅇ

	type: {
        type: String,
        require: true
    },
    Achievements: {
        type: String,
        require: true
    },
    alive_or_dead: {
        type: String,
        enum: ['dead', 'alive'],

        require: true

"require" ㅎㅇ ㅗㅗ
require로 썼다. 하나 잘못 쓰고 복붙 잘못해서 그런거 같다. Achievements도 require이었는데 정보는 들어와서 몰랐는데 얘도 require 이어서 다같이 옳은 스펠링인 required로 고쳐주고 오류를 볼 수 있었다.



ㅇㅋ 굳 1번 해결 ~

그렇다면 2번 오류 왜 정보가 안들어올까?

    <form action="/rolemodel" method="POST">
        <label for="name">Name: </label>
        <input type="text" placeholder="name" name="Name" id="name">

        <label for="Born">Born: </label>
        <input type="number" placeholder="Born" name="Born" id="Born">

        <label for="Nationality">Nationality: </label>
        <input type="text" placeholder="Nationality" name="Nationality" id="Nationality">
       
        <label for="Type">Type: </label>
        <input type="text" placeholder="Type" name="Type" id="Type">
        
        <label for="type">Achievements: </label>
        <input type="text" placeholder="Achievements" name="Achievements" id="Achievements">
               
        <label for="dead_or_alive">dead or alive</label>
        <select name="dead_or_alive" id="dead_or_alive">
            <option value="alive">alive</option>
            <option value="dead">dead</option>
        </select>
        <br>
        <br>
        <button>submit</button>
    </form>

form 설정도 문제 없고

app.post('/rolemodel',async (req, res) => {
    const Maninfo = new People(req.body)
    const greatManInfo = await Maninfo.save() 
    res.redirect(`/rolemodel/${greatManInfo.id}`)
})

라우트 설정 문제도 없고 근데 대체 뭘까 그래서 그냥 다 바꿔봤는데.. 안됐다. 스키마는 안 만지고 form 바꿔보고 라우터 만져보고 했는데 데이터가 계속 안들어 왔다.

그래도 안돼서 마지막으로 키 이름이 문제가 있나 하고
type -> Type으로 바꿨더니

   type: {
        type: String,
        required: true

   }
  
  
  ↓
 
     
   Type: {
        type: String,
        required: true
    }


type에 대한 required 오류는 해결되고 이름을 바꾸지 않은
alive_or_dead에 대한 required 오류만 받게 되었다.
키 이름이 문제였던 것이다.

이것에 대한 원리는 모르겠다 왜 이름에 따라 데이터가 전송되고 전송이 안되는지.

마지막 오류인 alive_or_dead또한 이름을 바꿔주었다.
그런데 얘는 이름만 3 번정도 바꿔줬다.

alive_or_dead -> aliveDead -> Alive -> alive
alive는 데이터를 전송하였는데 다른 이름들은 전송을 안해줬다.

오류 해결.

ㅠㅠ 해결하긴 했지만 원리를 몰라서 찝찝하다.

이름이 문제일 거라고는 생각도 안하고 다른 것들을 계속 만지다보니 간단한 오류 하나 때문에 너무 많은 시간이 걸렸다..

profile
I want to be a Backend Developer

0개의 댓글