본문 바로가기
카테고리 없음

reason: BSONTypeError: Argument passed in must be a string of 12 bytes or a string of 24 hex characters or an integer 에러 해결

by Lizzie Oh 2023. 1. 21.

클라이언트로 받은 form 데이터를 mongoose 를 사용해서 mongoDB에 저장할 때, 필수값이 아니고, 자료형이 ObjectId인 데이터가 있었다. 클라이언트에서 해당 값이 null로 들어오기 때문에 그대로 mongodb에 넘겼는데 여기서 계속 에러가 났다.

 

reason: BSONTypeError: Argument passed in must be a string of 12 bytes or a string of 24 hex characters or an integer

 

위와 같은 에러였는데 처음에는 급하게 해결하느라, 이 값이 null 이면 아예 이 값을 빼고 create 하도록 했었다. 

if (classMaterial === 'null') {
    await Class.create({
        title, 
        startDateTime, 
        studentMaxNum, 
        classKey, 
        thumbnail, 
        user
    });
        }
else {
    await Class.create({
        title, 
        startDateTime, 
        studentMaxNum, 
        classKey, 
        classMaterial ,
        thumbnail, 
        user
    });

(이때 null 인지 체크할 때 === null 로 하면 안 걸린다. === 'null' 로 해야 한다... 이것도 한참 헤메다 알았음)

 

하지만 이렇게 해결하는 건 너무 지저분한 방법이었다. 지금은 필드 하나니까 망정이지 이런 필드가 두개 , 세개만 있어도 코드가 엄청 길어질게 뻔했다. 처음에는 해당 값이 null 이면 " " 공백으로 처리해봤는데 이래도 동일한 에러가 발생했다. 

 

오래 헤맸는데 답은 가까운데 있었다. null 로 보내면 된다. 다만 'null' 이 아니라 null 이어야 한다. 이를 알아낸 덕에 아래와 같이 깔끔하게 코드로 고칠 수 있었다!! ^.^ 

 

 await Class.create({
    title, 
    startDateTime, 
    studentMaxNum,  
    classMaterial: classMaterial === 'null' ? null : classMaterial , 
    thumbnail, 
    user
        });

 

 

반응형

댓글