에러 해결 - 07. Function setDoc() called with invalid data. Unsupported field value a custom Promise object.

이유승·2023년 7월 13일
0

에러 해결

목록 보기
7/25

프로젝트의 백엔드과 데이터베이스는 구현이 간편하고 배포까지 한꺼번에 처리해주는 구글 파이어베이스를 사용하였다.

과거 Oracle이나 MySQL같은 RDBMS를 사용했던 시절에 비해서 데이터베이스에서 데이터를 주고받는 것이 간편하면서도 조금만 복잡한 기능을 구현하기만 해도 문제가 생겨서 참 골치였는데, 사용이 정말 쉬운 것도 사실이라 이래저래 잘 사용했다고 생각하긴 했다.



1. TypeError: n.indexOf is not a function.

이 에러와 본문 제목의 에러는 파이어베이스, 그 중에서도 파이어스토어를 사용했을 때 흔하게 만나는 에러 중 하나이다. 에러 문구는 여럿이지만 사실 원인은 하나이다. 파이어스토어 함수를 사용할 때 필요한 인자는 정해진 데이터 형식만을 사용해야하는데, 그렇지 못했을 때 발생된다.

setDoc() 혹은 addDoc() 함수를 실행할 때, Doc의 id 명칭을 사용자 수동으로 입력할 수 있는데 문자열 데이터 등이 사용되어야 하는데 실수로 객체 데이터를 집어넣어버렸다던지.

특정 조건을 통해 파이어스토어에서 조회한 데이터를 doc() 함수로 받아왔을 경우, 반환값은 파이어스토어 document 형식으로 이는 파이어스토어에서 사용이 가능한 여러가지 정보가 포함하고 있는 객체인데 이걸 그대로 사용하려 했거나.

등등.. 파이어스토어에서 정해진 규칙을 벗어났을 때 발생되는 에러이다.



2. 간단한 해결법.

에러의 해결법은 매우매우 단순하다. 파이어스토어의 문법 규칙을 준수하기만 하면 된다.

인자로 사용할 수 있는 데이터 형식이 정해져 있다.
-> parseInt이나 toString으로 형변환을 해주거나, 객체 내부에 특정 데이터를 사용할 것이라면 점 표기법 등으로 특정 값만 가져와서 사용한다.

파이어스토어 document 데이터가 반환되어온다.
-> 이런 상황을 대비하여 파이어스토어에서는 data() 함수를 제공하여 파이어스토어 document 객체에 포함된 DB 데이터만을 뽑아올 수 있도록 지원하고 있다. 콘솔 등에서 반환값을 찍어봤는데 DB 데이터가 아니라 파이어스토어 객체같은게 찍혀나오면 필히 data() 함수를 사용해 보는 것이 좋다.

profile
프론트엔드 개발자를 준비하고 있습니다.

0개의 댓글