🐞 Debug
[Firestore + React]Uncaught (in promise) TypeError: n.indexOf is not a function
yeossi
2022. 1. 27. 14:25
📢 이 버그 좀 보세요!
필자는 firestore에 문서를 삽입(setDoc)하는 과정에서 위와 같은 에러를 접하게 되었다.
🐞 버그가 나타난 이유?
구글링을 했을 때는 async, promise 관련 에러로 보였으나, 에러가 난 아래의 소스를 확인해 본 결과 말 그대로 type error였다.
setDoc을 할 때 document의 id는 무조건 String형 데이터를 입력해야하나, Number형 데이터가 들어가고 있었던 것이다.
const getProfile = async () => {
try {
const database = getFirestore(firebase); // firestore 접근
// Kakao SDK API를 이용해 사용자 정보 획득
let data = await window.Kakao.API.request({
url: "/v2/user/me",
});
//
const q = query(collection(database, 'users'), where('user_id', '==', data.id));
getDocs(q).then(async userChk =>{ // user_id가 DB에 등록됐는 지 체크, 없으면 추가한다.
if(userChk.size === 0)
{
await setDoc(doc(database, "users", data.id), {
user_id: data.id,
user_name: data.properties.nickname,
});
}
})
// list 이동
history(`/memolist/${data.id}`, {state : {nickName: data.properties.nickname}});
}
🕸 어떻게 이 버그를 잡을까?
해결 방법은 간단하다. setDoc에 id값으로 부여할 data.id를 아래와 같이 String형으로 형변환 해주면 된다.
await setDoc(doc(database, "users", String(data.id)), {
user_id: data.id,
user_name: data.properties.nickname,
});