클라이언트로 받은 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
});
반응형
댓글